2010-03-15 32 views
1

當更新managedObjectContext時,是否可以在視圖控制器中執行保存設置,這可能會被釋放,或者appDelegate是否應處理managedObjectContext的保存,以便即使viewController被釋放,保存結束?核心數據並在subViewControllers中保存上下文,可以發佈嗎?

我傾向於移動存儲踏進我的appDelegate並具有viewControllers調用的想法[的appDelegate saveContext]當進行更新時,雖然也許這是毫無意義的,因爲viewController不會完成釋放,直到它完成保存到CD任何方式......?

例如,是否有這兩個動作之間的任何差別,從subViewController完成:

[appDelegate.managedObjectContext save:&error] 

[appDlegate saveContext] 

凡在的appDelegate運行[managedObjectContext保存方法:&錯誤]

謝謝, Sam

回答

0

猜測,您的應用程序是單線程的,這樣保證了保存操作將結束被釋放視圖控制器之前,因爲該線程將在保存塊。

如果您正在運行多線程應用程序;那麼

  1. 你不應該保存在後臺線程上,這在覈心數據中是危險的。

  2. 你不應該訪問在後臺線程視圖控制器,因爲所有的視圖相關的活動應該在主線程上執行。

因此,不存在「正確」的情況下,你將不得不擔心-save:沒有完成,無論你是因爲它是一個阻塞調用所謂的對象吧。

+0

啊,是的,我忘了。我正在運行多線程應用程序,並根據線程應用程序的文檔中的建議更新coreData(在spun-thread中進行復制和更新並在主線程上執行合併)。感謝您在單線程環境中的確認。 – Shizam 2010-03-15 21:51:08

+0

正如我所提到的,即使您在多線程應用程序中,您的保存也不會跨越線程邊界,因此它將阻止它所在的線程,因此您仍然可以安全地調用'-save: '只要你在調用'-save:'之後釋放該對象' – 2010-03-15 23:48:39

0

如果您只是通過您的應用程序使用一個managedObjectContext,那麼將保存功能保留在應用程序委託中並不是一個壞主意,這樣無論您的視圖控制器在整個應用程序生命週期中的狀態如何,都將保存任何更新當應用程序終止。

話雖這麼說,我發現它有用添加額外的保存點,有時在視圖控制器,會做一些顯著更新後保存到數據庫中。這樣,即使應用程序崩潰或最終的保存操作無法完成,我也會保存我的數據。

我是核心數據的相對新手,所以請告訴我,如果這是不好的做法。

+0

是的,這就是我傾斜的方式。我想知道,如果在VC中被釋放或者直到[上下文保存]完成之前它不會完全釋放,viewController中的[context save]步驟會產生問題。 – Shizam 2010-03-15 18:09:17