2010-06-11 13 views
1

爲NSManagedObjectContext中的-reset方法是混亂的文檔...如何丟棄對使用接收器獲取的任何託管對象的引用?

所有接收方的管理對象 「忘了。」如果你用這種方法, 你應該確保你也 丟棄引用使用接收器獲取的任何受管理的 對象, 因爲之後它們將無效。

那麼,是什麼意思呢?當我從持久存儲中提取任何對象,然後重置我的上下文時,我將如何「放棄引用」?爲什麼我必須這樣做?

回答

1

如果您從代碼中的某處存儲了NSManagedObject,那麼您在其他地方重置了上下文,現在您更改ManagedObject並嘗試通過上下文將其存儲到存儲區(重置並且沒有引用到任何對象)它會崩潰你的應用程序。

的背景是一個「便箋」,它在商店「訪問」所有的東西,但已經引起中/只的交易,你通過它啓動的應用程序後,檢索到的對象。 當您在NSManagedObject讀,上下文(據我所知)進行復印並跟蹤您對所有的變化,它什麼也不做的商店,你堅持它。這是核心數據的存儲管理和易於實施的是什麼使撤消,重做等

所以重置的背景下也扔掉這些變化並沒有什麼堅持到店裏來。

編輯://添加

參考,你應該不計報酬,以十分重視。你不必釋放它或類似的東西,核心數據會照顧到這一點,只是不參考ManagedObject和autorelease池將放棄它。

+0

不知道我是否可以遵循:當我創建一個管理對象爲特定的上下文,然後重新保存之前的背景下,我可以通過後-reset調用-save崩潰的應用程序?這不是核心數據中的錯誤嗎?這不應該發生。 - 迴應應該扔掉,並且 - 儲蓄應該知道什麼都沒有。還是我弄錯了? – dontWatchMyProfile 2010-06-11 09:59:15

+0

嗨,不,我不認爲這會導致應用程序崩潰,上下文有hasChanged屬性,我認爲Core Data在做任何事情之前都會檢查它。所以一個「乾淨的」上下文不會被持久化。崩潰部分是如果您在重置之後引用ManagedObject,請將其更改或由被釋放的autorelease池捕獲。 ______________ 我有點讓你試圖做類似使用managedObject臨時儲存,然後就丟棄擺脫你不需要的那些上下文的感覺?這通常是一個壞主意:(:(我只是猜測當然..對不起,如果它是錯誤的) – RickiG 2010-06-11 10:18:06

+0

哈哈不,我沒有嘗試,我所嘗試的是完全理解核心數據這就是爲什麼我感興趣每一個方法 – dontWatchMyProfile 2010-06-11 11:09:53

相關問題