[英]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.