對不起,標題可能會誤導你,因爲我不擅長英語。讓我來描述一下我的問題(您可以跳到本問題底部的TL; DR版本)。修復NSManagedObject的重複副本
在Coredata中,我設計了一個
Product
實體。在應用程序中,我從服務器下載產品。它返回JSON字符串,我對它進行碎片整理然後保存到CoreData。有時候,我再次從該服務器搜索產品,與服務器進行一些交互。現在,我打電話給在線產品
XProduct
。 CoreData中可能不存在此產品,我也不想將它保存到CoreData中,因爲它可能不屬於此係統(它來自其他倉庫,而不是我當前的倉庫)。假設這個
XProduct
具有相同的性質Product
,但不屬於CoreData,從之前的開發者設計的另一個目的,XProduct
,並複製從Product
一切(代碼)。哇。這兩者之間的另一個不同之處是,XProduct
有一些方法與服務器進行交互,如:- (void)updateStock:(NSInteger)qty;
現在,我想升級
Product
性質,我將不得不更新XProduct
也。我必須單獨使用這兩個,如:
id product = anArrayContainsProducts[indexPath.row];
if ([product isKindOfClass:[XProduct class]] {
// Some stuff with the xproduct
}
else {
// Probably the same display to the cell.
}
TL; DR
基本上,我想創建這樣一個場景:
- 從服務器獲取數據。
- 檢查是否存在於CoreData中。
2
== true =>添加到數組(也可以從服務器更新一些數據)。2
==假=>創建對象(包含相同的結構,從NSManagedObject
JSON字典=>添加到陣列。
在步驟4中創建的對象將永遠不會在CoreData存在。
問題
- 我怎樣才能創建一個
NSManagedObject
,而無需將其添加到NSMangedObjectContext
,並確保應用程序將運行正常? - 如果
1
不是鼓勵,請給我一個更好的方法來解決這個問題。我真的不喜歡重複那麼多的代碼。
更新
我在想繼承(XProduct : Product
),但它仍然讓XProduct的NSManagedObject
的子類,所以我不認爲這是一個不錯的辦法。
隨着你的答案+ http://stackoverflow.com/a/3008439/1696598,我發現解決方案相當不錯!我選擇使用你的第一種方法,因爲它更容易實現到我的CoreDataUtil。 – Eddie