我对 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.asset 中,它可以是一个或几个不同类对象的组合:
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)
在我保存上下文之前,以下似乎有效,我可以通过以下方式访问 Person 对象:
let peopleInGroup = Group.people!
for case let person as Person in peopleInGroup {
if person.type != "" {
print (person.type as! String)
}
}
直到我保存上下文并重新加载应用程序。在加载应用程序时,我获取 Group 对象,然后尝试执行上面相同的代码。它似乎指向正确的人员对象,但在 person.type 行上失败,我最终得到一个错误:[error] error: exception handling request: , -[Asset initWithCoder:]: unrecognized selector sent to instance 0x60c00027e040用户信息为(空)
我相信我在保存和获取时可能需要对资产字段进行某种编码?即使我试图访问该人的 type 属性,错误仍是在引用资产。提前感谢您的帮助。