簡體   English   中英

如何在核心數據上下文之外使用核心數據模型子類?

[英]How to use Core Data model subclasses outside a Core Data context?

我試圖在Swift中制作一個天氣應用程序,該應用程序將保存我添加到Core Data中的城市,每個城市都包含一個天氣對象,該對象也保存到Core Data和其他各種變量中。

但是我很快就發現,在Core Data上下文之外使用Core Data NSManagedObjects子類幾乎是不可能的(處理NSNumber和類似的東西,沒有自定義init,被迫保存在某個地方,如果我明天停止使用Core Data,該怎么辦...) 。

那么,繼續使用Core Data並在其上下文之外使用模型的最佳實踐是什么?

我現在的解決方案是為每個模型創建一個類,因此:

class City
{
    var country: String?
    var name: String?
    // ...
}

是對應的類:

class CD_City
{
    @NSManaged var country: String?
    @NSManaged var name: String?
    // ...
}

這樣我就可以在任何地方使用City 但是我需要一個func才能將City變成CD_City和相反的City 所以我真的不確定我是不是最好的方法。 另外,您會推薦什么作為轉換方法?

(僅供參考,我使用MagicalRecord作為核心數據助手)

TL; DR-不這樣做,否則事情會破裂。

過去有各種各樣的技巧可以使它正常工作,但是它們都依賴於CoreData中未記錄的行為。 絕不會在代碼中使用我想向其他人展示的東西,更不用說運送給客戶了。 CoreData需要插入代理對象 ,這些代理對象會掛接到模型對象的屬性更改事件中 ,並且它能夠可靠地做到這一點並跟蹤原始數據值的唯一方法是,它首先要負責創建那些實體。 這也使故障和唯一性系統正常工作。 不要將Core Data視為ORM,它實際上是一個對象圖管理框架 ,因此,它被設計為以某種方式使用,而沒有簡單的解決方案來安全地繞過它。

如果您不想保存NSManagedObject或其子類,則可以使用以下方法創建它

init(entity entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?)

並將nil傳遞給insertIntoManagedObjectContext這將為您創建一個實例,但不會保存到MOC。

如果以后需要將其保存到MOC,則可以使用NSMangedObjectContext的

func insertObject(_ object: NSManagedObject)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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