iOS核心数据可转换



我对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(

我相信,当我保存和获取时,我可能需要在资产字段上进行某种编码?即使我试图访问该人的类型属性,该错误还是引用资产。事先感谢您的任何帮助。

可转换属性通过在属性值上使用NSCodingasset是否具有多种类型并不重要,只要所有类型都符合NSCoding。如果将其添加到您的各种类型中是一个问题,您必须找到其他方法来保存资产信息。

相关内容

  • 没有找到相关文章

最新更新