2013-10-14 41 views
0

我目前正在進一步深入Core Data,並對使用Core Data NSManagedObject模型有一些小的困惑。核心數據中NSManagedObject的正確用法

例如,我想有一個「聯繫」實體具有這樣的特性名字,姓氏,地址等...

我試圖瞭解是否有被任何「最佳實踐「,如果這是可能的話,則使用NSManagedObject作爲常規NSObject。

例如,我有一個服務器以JSON方式返回一些聯繫人數據,但是我想將它作爲某種NSObject返回,所以它會擁有自己的屬性,方法等......但另一方面,它將愚蠢創建2個類來表示聯繫實體 - 一個用於處理我想從服務器數據(NSObject)提供清理對象的情況,另一個用於處理核心數據(NSManagedObject)。有什麼辦法可以同時使用單個對象嗎?在這種情況下最好的做法是什麼?

編輯: 下面是我在普遍的問題:http://pastebin.com/WHWNqj2f

+0

最佳做法是爲這兩種情況設置一個對象。只需在你的NSManagedObhect中實現一個自定義的init方法([[YourObject alloc] initWithJSONDictionary:..])並分配相應的值 – CarlJ

+0

@CarlJ - 問題在於我不能僅僅初始化一個NSManagedObject而不給它一個上下文。另外,我無法創建可以與Core Data一起使用的NSObject。這正是我遇到的問題。 –

+0

比創建NSManageObject將值傳遞給它並且不保存上下文。 – CarlJ

回答

0

有沒有必要有this--不止一個類只使用被管理對象在所有情況下。你在評論中提到「我不能只是初始化一個NSManagedObject而沒有給它一個上下文」但實際上這是不正確的。當您使用[NSManagedObject initWithEntity:insertIntoManagedObjectContext:][NSEntityDescription insertNewObjectForEntityForName:inManagedObjectContext:]創建託管對象時,您不必提供託管對象上下文。只要您提供有效的NSEntityDescription即可,如果該參數爲nil即可。你得到的是一個與任何託管對象上下文無關的託管對象。這對於臨時對象來說可能非常方便,因爲您可以在不保存此對象的情況下將更改保存在您擁有的任何託管對象上下文中。

如果您想稍後將對象保存到託管對象上下文中,請使用[NSManagedObjectContext insertObject:]。此時,託管對象與上下文關聯,因此保存對上下文的更改將保存該對象。

+0

嘿湯姆,謝謝 - 我曾經用這種方法工作,但是這阻止了我使用MagicalRecord ...所以不幸的是我試圖修復它一點點。是否建議使用2個獨立的上下文可行? –

+0

這也可以工作。 –

相關問題