我对iOS coredata实现相对较新。这是我的问题:
我的实体具有一个"资产"字段,其中可能包含一种或多种不同类型的对象。它是另一个的子对象。存储此问题的最佳方法是什么?如何检索它。
我的伪代码示例:
extension Group (
@NSManaged public var created: NSDate?
@NSManaged public var type: String?
@NSManaged public var people: NSSet?
}
extension Person {
@NSManaged public var created: NSDate?
@NSManaged public var type: String?
@NSManaged public var asset: NSObject? //marked as transformable in data model
}
在person.sett中,它可以是几个不同类别的对象的一个或组合:
extension Car {..}
extension House { ...}
etc.
我当前的保存方法是创建个人类型的资产并添加到人身上;
let myGroup = Group(...)
let person1 = Person(...)
let hisCar = Car(..)
person1.asset = hisCar
myGroup.addPersonObject(person: person1)
let person2 = Person(...)
let hisHouse = House(...)
person2.asset = hisHouse
myGroup.addPersonObject(person: person2)
在保存上下文之前
let peopleInGroup = Group.people!
for case let person as Person in peopleInGroup {
if person.type != "" {
print (person.type as! String)
}
}
直到我保存上下文并重新加载应用程序。在应用程序的加载时,我获取组对象,然后尝试执行上面的相同代码。它似乎指向合适的人对象,但在人群上失败。[错误]错误:异常处理请求:, - [Asset InitwithCoder:]:未识别的选择器已将选择器发送到实例0x60C00027E040(null(
我相信,当我保存和获取时,我可能需要在资产字段上进行某种编码?即使我试图访问该人的类型属性,该错误还是引用资产。事先感谢您的任何帮助。
可转换属性通过在属性值上使用NSCoding
。asset
是否具有多种类型并不重要,只要所有类型都符合NSCoding
。如果将其添加到您的各种类型中是一个问题,您必须找到其他方法来保存资产信息。