1

我对 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 属性,错误仍是在引用资产。提前感谢您的帮助。

4

1 回答 1

0

可转换属性通过使用NSCoding属性值来工作。是否有多种类型并不重要asset,只要它们都符合NSCoding. 如果将其添加到您的各种类型中是一个问题,您将不得不找到其他方法来保存资产信息。

于 2018-02-20T15:53:01.260 回答