簡體   English   中英

iOS核心數據可轉換

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM