2

我使用CoreData來管理我的應用程序數據模型。我在編輯視圖控制器中使用子管理的對象上下文,以便我們可以保存或放棄用戶所做的更改。如何保存臨時NSManagedObjectContext而不將其保存到父上下文

我創建子上下文如下:

NSManagedObjectContext* mainMoc = <my main context>; 
NSManagedObjectContext* editMoc = [[NSManagedObjectContext alloc] init]; 
editMoc.parentContext = mainMoc; 

如果用戶點擊「完成」按鈕,我保存更改如下:

[editMoc save:&error] 

如果用戶點擊「取消」我只是放棄editMoc上下文。

這裏是問題: 我在整個應用程序中使用狀態保存和恢復,並且我想在應用程序轉到後臺時將editMoc上下文與更改一起保存以進一步恢復。我不想將editMoc和mainMoc合併,因爲用戶並沒有決定是保存還是放棄更改。

我嘗試使用NSCoding協議來序列化editMoc,但註冊的對象不以這種方式保存。 我也嘗試更改parentContext,但是這會引發異常。

我相信應該有一個很好的方法來完成上述任務,因爲使用子上下文和狀態保存是一種常見的做法。

我的項目運行在iOS 6.0及以上版本。

回答

2

Core Data內部沒有辦法保存這些對象。但是,您可以執行的操作是向所有未保存的對象(-updatedObjects,-insertedObjects,-deletedObjects)請求moc,然後遍歷它們並將它們單獨保存到磁盤。我建議將它們保存爲JSON或plists等中間格式。

相關問題