我想用我的Core Data數據庫同步http請求結果。例如非常基本類:iOS同步json服務器對象列表
class Category: NSManagedObject {
@NSManaged var id: NSNumber
@NSManaged var name: String
@NSManaged var imageUrl: String
}
而且我從請求得到結果這個方法:
apiManager.getRequestJsonParse(Constants.Server.BackendUrl + "categories?lang=cs", completion: { (result, error) -> Void in
completion(categories: [], error: error)
})
結果是字典從JSON解析。沒關係,但現在我想將字典解析到我的類中,檢查數據庫中是否存在,是否存在更新屬性以及是否將新類別添加到數據庫。我之前在應用程序中使用的方法是我有兩個類:Category和CategoryCD(類似於Core Data的CD),並且首先將JSON解析爲Category類,而不是所有類別,我檢查是否有任何CategoryCD(保存在CD中)具有相同的ID,然後更新,或添加或其他東西。
現在我想如果有更好的方法,我該怎麼做。我可以每次下載新結果時刪除我的數據庫,然後添加所有結果。這種方式的問題是,如果我爲某些我想保留的類提供某些東西。就像我下載並保存圖像一樣,我寧願在課堂和保存的圖像之間建立聯繫。
我在考慮我的舊方法,但將1個核心數據類減少2個幾乎相同的類(1個用於核心數據,1個用於解析)。但是,當我啓動這個類時,有一個問題,我必須始終在數據庫中創建權限?所以它可能很複雜。
你在用什麼?我認爲這是非常普遍的問題。你有項目列表,我希望它們可以脫機使用(包括我之前下載的所有數據),但是當我連接到互聯網時,我想用新的結果進行更新(不是從服務器全部下載,只是我請求的響應) 。
該代碼的性能會很糟糕。您正在爲每個單獨的對象執行一次訪存以確定它是否存在。這是N命中到磁盤。相反,您應該使用KVO從傳入的JSON獲取所有唯一標識符,並執行** ONE **調用現有對象的磁盤。然後你可以迭代。 –
@ MarcusS.Zarra哦,我知道這一點。但是,這是一個單一的條目。我敢肯定,運營商可以根據自己的需求調整代碼 – Chackle
如何使用KVO來查找所有獨特的ID? – Lytic