0

我的應用程序有時會將對象插入托管對象上下文中,這些對象不一定需要保存。例如,當我啓動一個'添加實體'模式時,我創建一個託管對象並將其分配給模態。如果用戶保存該模式,我保存上下文。如果他取消,我刪除該對象,不需要保存。對NSManagedObjectContext的併發更改 - 如何以及何時保存

我現在已經引入了一個'導入'功能,切換到我的應用程序(使用URL方案)並添加一個實體。因爲這些模式中的一個可能是開放的,所以在這一點上保存上下文是不安全的。爲模式創建的瞬態對象將被保存,即使用戶取消,也無法保證刪除(從取消操作)將在以後保存 - 用戶可能會退出應用程序。

同樣,我不能簡單地保存每當我的應用程序退出。如果該模式在此時打開,則臨時對象將被錯誤地保存。

我正在尋找處理此架構的策略。我正在考慮一些「標記」解決方案,它允許我識別導入的實體。當用戶用戶退出應用程序時,我會檢查上下文是否存在未保存的更改。如果是這樣,我會過濾除導入的實體以外的所有內容,然後保存。我不知道這是可能的(選擇性儲蓄)還是一個好主意。

+1

聽起來像你的模態應該使用單獨的上下文,這將允許您保存主要上下文,而不會意外地從模態中獲取正在進行的更改。 –

+1

偉大的文章在這裏:http://www.cocoanetics.com/2012/07/multi-context-coredata/關於使用不同的scanarios包括你所描述的一個孩子上下文。 –

+0

謝謝你們 - 我已經閱讀過幾次鏈接的博客,正在嘗試實施。我有一些問題,但到目前爲止,感覺就像是正確的道路。我將在工作時添加自己的答案,詳細說明我的解決方案。 –

回答

0

凱文和安德魯的評論(和鏈接的文章)足以讓我走了。我在this問題中得到了一些後續建議。

總之,我正在使用子上下文創建瞬態對象,然後將其合併到主上下文中。實際上,我只需要臨時上下文作爲插入對象的位置 - 例如,如果可以在插入消息外創建它,我可以這樣做,然後將其直接插入到確認的主要上下文中。

相關問題