2011-08-30 57 views
2

我正在構建一個應用程序,該應用程序從Web API接收許多列表,並允許用戶保存一些用於離線查看。我通常的做法是:我可以在沒有特定的NSManagedObjectContext中創建NSManagedObject的實例嗎?

  1. 從API獲取數據,並作出新的上市對象的每個數據
  2. 對象保存到數據庫如果用戶選擇這樣做。

但是這是一個核心數據應用程序,所以上下文是保存的內容,而不是對象。在這些情況下,上面會變成這樣的事情:

  1. 從API獲取數據,並進行非託管上市對象的每個數據
  2. 移動物體進入管理方面,如果用戶選擇做所以,然後保存上下文

有一個非託管和託管版本的對象的方法是有兩個類,例如託管上市和非託管上市 - 但這是一個可怕的重複性的做法。

我想要做的是列出NSManagedObject的子類;初始化一堆沒有NSManagedObjectContext的;那麼當我想保存一個時,我要麼設置其上下文,要麼將其屬性複製到上下文中的新列表。

我可以在沒有特定的NSManagedObjectContext中創建NSManagedObject的實例嗎?如果是這樣,怎麼樣?

+0

爲什麼不把它們全部放在上下文中,然後在不需要時刪除它們。或者,您可以將它們全部分離,然後通過將每個對象的信息傳遞給ManagedObject obj來保存它們。 –

+0

如果create-and-delete是臨時對象的模式,是否有方法來取消刪除它們?我不喜歡兩級解決方案,因爲它會增加保持它們之間關係的工作。 – Simon

+1

你有'[context deleteObject:]'和'[context insertObject:]'這會讓你在你的對象是否被「插入」到被管理的對象上下文中做出改變。當你想保存當前佈局時,只需調用'[context save:]' –

回答

7

使用兩個持久性存儲,一個存儲在內存中,另一個存儲在磁盤上。如果用戶想要保存,請使用assignObject:toPersistentStore:將對象移動到其他商店。

+0

最好的解決方案! – Nekto

0

在iOS中< 5.0 - 。 在iOS> = 5.0 -

+0

你可以進入更多的細節? – Simon

+0

如果你只會分配+ init的NSManagedObject:在iOS版本低於5.0的情況下編譯器會給出警告。在版本高於或等於5.0的iOS中,編譯器會給出錯誤。 – Nekto

相關問題