无法解决一对多关系
cannot resolve one-to-many relationship
我试着去理解coredata。进展顺利的是添加了 Hond 和 gewicht。这巧妙地将 gewicht 置于关系中。但是当我想稍后添加一个额外的 gewicht 时,我 运行 遇到了一个问题,我不能那样做。
我看到以下消息:
NSManagedObject' is not convertible to 'Hond'
这是我尝试添加权重的代码
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let context = appDelegate.persistentContainer.viewContext
let hondEntity = NSEntityDescription.entity(forEntityName: "Hond", in: context)!
let hond = NSManagedObject(entity: hondEntity, insertInto: context)
let gewichtHondEntity = NSEntityDescription.entity(forEntityName: "GewichtHond", in: context)!
let gewichtHond = NSManagedObject(entity: gewichtHondEntity, insertInto: context)
let nieuwGewicht = GewichtHond(context: context)
nieuwGewicht.datum = Date()
nieuwGewicht.gewicht = Double("38")!
//gewichtHond.setValue(Date(), forKey: "datum")
//gewichtHond.setValue(Double("38"), forKey: "gewicht")
Hond.addToGewichten(gewichtHond) //NSManagedObject' is not convertible to 'Hond
do {
try context.save()
print("Saved")
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
我的宝贝+CoreDataProperties.swift
extension Hond {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Hond> {
return NSFetchRequest<Hond>(entityName: "Hond")
}
@NSManaged public var chipnummer: Int64
@NSManaged public var dierenarts: String?
@NSManaged public var geboortedatum: Date
@NSManaged public var geslacht: Int16
@NSManaged public var hondId: String?
@NSManaged public var kleur: String?
@NSManaged public var naam: String?
@NSManaged public var orderID: Int16
@NSManaged public var plaatsVanChip: String?
@NSManaged public var telefoonnummerDierenarts: String?
@NSManaged public var vachttype: String?
@NSManaged public var gewichten: Set<GewichtHond>
}
// MARK: Generated accessors for gewichten
extension Hond {
@objc(addGewichtenObject:)
@NSManaged public func addToGewichten(_ value: GewichtHond)
@objc(removeGewichtenObject:)
@NSManaged public func removeFromGewichten(_ value: GewichtHond)
/*
@objc(addGewichten:)
@NSManaged public func addToGewichten(_ values: NSSet)
@objc(removeGewichten:)
@NSManaged public func removeFromGewichten(_ values: NSSet)
*/
}
如何添加额外的 gewicht?
这个错误有点误导。基本上它说 gewicht
关系的类型是一个集合而不是一个数字。这也表明 GewichtHond
.
中的 gewicht
属性受到干扰
为避免命名混乱,强烈建议使用对应方的实体名称命名关系,一对一关系以单数形式命名,一对多关系以复数形式命名。一对多关系应命名为gewichten
。 Swift 中的类型应该是 Set<GewichtHond>
不是未指定的 NSSet
要添加和删除 GewichtHond
实例 to/from 在 Hond
子类
中至少需要这两个访问器方法
// MARK: Generated accessors for gewichten
extension Hond {
@objc(addGewichtenObject:)
@NSManaged public func addToGewichten(_ value: GewichtHond)
@objc(removeGewichtenObject:)
@NSManaged public func removeFromGewichten(_ value: GewichtHond)
}
现在创建一个Hond
实例和一个GewichtHond
实例并将后者添加到关系集
let hond = NSEntityDescription.insertNewObject(forEntityName: "Hond", into: context) as! Hond
let gewichtHond = NSEntityDescription.insertNewObject(forEntityName: "GewichtHond" , into: context) as! GewichtHond
hond.addToGewichten(gewichtHond)
旁注:在 NSManagedObject
子类中,点符号 hond1.datum = Date()
比 KVC 方法 hond1.setValue(Date(), forKey: "datum")
更方便(并且更安全)。
我试着去理解coredata。进展顺利的是添加了 Hond 和 gewicht。这巧妙地将 gewicht 置于关系中。但是当我想稍后添加一个额外的 gewicht 时,我 运行 遇到了一个问题,我不能那样做。
我看到以下消息:
NSManagedObject' is not convertible to 'Hond'
这是我尝试添加权重的代码
guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
let context = appDelegate.persistentContainer.viewContext
let hondEntity = NSEntityDescription.entity(forEntityName: "Hond", in: context)!
let hond = NSManagedObject(entity: hondEntity, insertInto: context)
let gewichtHondEntity = NSEntityDescription.entity(forEntityName: "GewichtHond", in: context)!
let gewichtHond = NSManagedObject(entity: gewichtHondEntity, insertInto: context)
let nieuwGewicht = GewichtHond(context: context)
nieuwGewicht.datum = Date()
nieuwGewicht.gewicht = Double("38")!
//gewichtHond.setValue(Date(), forKey: "datum")
//gewichtHond.setValue(Double("38"), forKey: "gewicht")
Hond.addToGewichten(gewichtHond) //NSManagedObject' is not convertible to 'Hond
do {
try context.save()
print("Saved")
} catch let error as NSError {
print("Could not save. \(error), \(error.userInfo)")
}
我的宝贝+CoreDataProperties.swift
extension Hond {
@nonobjc public class func fetchRequest() -> NSFetchRequest<Hond> {
return NSFetchRequest<Hond>(entityName: "Hond")
}
@NSManaged public var chipnummer: Int64
@NSManaged public var dierenarts: String?
@NSManaged public var geboortedatum: Date
@NSManaged public var geslacht: Int16
@NSManaged public var hondId: String?
@NSManaged public var kleur: String?
@NSManaged public var naam: String?
@NSManaged public var orderID: Int16
@NSManaged public var plaatsVanChip: String?
@NSManaged public var telefoonnummerDierenarts: String?
@NSManaged public var vachttype: String?
@NSManaged public var gewichten: Set<GewichtHond>
}
// MARK: Generated accessors for gewichten
extension Hond {
@objc(addGewichtenObject:)
@NSManaged public func addToGewichten(_ value: GewichtHond)
@objc(removeGewichtenObject:)
@NSManaged public func removeFromGewichten(_ value: GewichtHond)
/*
@objc(addGewichten:)
@NSManaged public func addToGewichten(_ values: NSSet)
@objc(removeGewichten:)
@NSManaged public func removeFromGewichten(_ values: NSSet)
*/
}
如何添加额外的 gewicht?
这个错误有点误导。基本上它说 gewicht
关系的类型是一个集合而不是一个数字。这也表明 GewichtHond
.
gewicht
属性受到干扰
为避免命名混乱,强烈建议使用对应方的实体名称命名关系,一对一关系以单数形式命名,一对多关系以复数形式命名。一对多关系应命名为gewichten
。 Swift 中的类型应该是 Set<GewichtHond>
不是未指定的 NSSet
要添加和删除 GewichtHond
实例 to/from 在 Hond
子类
// MARK: Generated accessors for gewichten
extension Hond {
@objc(addGewichtenObject:)
@NSManaged public func addToGewichten(_ value: GewichtHond)
@objc(removeGewichtenObject:)
@NSManaged public func removeFromGewichten(_ value: GewichtHond)
}
现在创建一个Hond
实例和一个GewichtHond
实例并将后者添加到关系集
let hond = NSEntityDescription.insertNewObject(forEntityName: "Hond", into: context) as! Hond
let gewichtHond = NSEntityDescription.insertNewObject(forEntityName: "GewichtHond" , into: context) as! GewichtHond
hond.addToGewichten(gewichtHond)
旁注:在 NSManagedObject
子类中,点符号 hond1.datum = Date()
比 KVC 方法 hond1.setValue(Date(), forKey: "datum")
更方便(并且更安全)。