[英]iOS Core Data transformable
我是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行上失败,并且出现错误:[错误]错误:异常处理请求:-[Asset initWithCoder:]:无法识别的选择器发送到实例0x60c00027e040的userInfo为(null)
我相信在保存和提取数据时可能需要对资产字段进行某种编码? 即使我尝试访问此人的type属性,该错误仍在引用资产。 在此先感谢您的帮助。
可转换属性通过对属性值使用NSCoding
来工作。 asset
是否具有多种类型并不重要,只要它们都符合NSCoding
。 如果将其添加到您的各种类型中是一个问题,则必须找到其他方法来保存资产信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.