我有一個呈現對象的控制器,有些時候在顯示此頁面的過程中會刪除一些對象。而如果我們嘗試使用這個對象 - 所有的屬性都是零。即使nsmangedobject已被刪除,仍然保持活動狀態
是否有辦法使用複製NSMangedobject而不將他作爲一個自由對象連接到真實的數據庫。所以當原始對象被刪除時,這個對象會穩定並充滿數據?
感謝
我有一個呈現對象的控制器,有些時候在顯示此頁面的過程中會刪除一些對象。而如果我們嘗試使用這個對象 - 所有的屬性都是零。即使nsmangedobject已被刪除,仍然保持活動狀態
是否有辦法使用複製NSMangedobject而不將他作爲一個自由對象連接到真實的數據庫。所以當原始對象被刪除時,這個對象會穩定並充滿數據?
感謝
聽起來好像你想爲這個控制器創建一個新的NSManagedObjectContext
。您需要在您可以訪問原始上下文或其持久存儲協調員的地方執行此操作。如果您通過故事板segue加載視圖控制器,則可以在prepareForSegue:sender:
中執行此操作。
控制器需要從這個上下文中加載它的對象。您無法傳遞您使用原始上下文獲取的對象。相反,要求每個原始對象的objectID
,並使用這些ID使用新的上下文創建新的託管對象。立即創建所有新對象並訪問每個對象的持久屬性(以便對對象進行無錯操作)。新控制器必須對這些對象中的每一個保持強大的參考,因爲上下文不一定保留它們。
只要您不將refreshObject:mergeChanges:
或mergeChangesFromContextDidSaveNotification:
發送到控制器的私有上下文,所有對象應該保持有效並且它們的屬性不應該改變。
如果你只是想保持一個參考存活運行時,你只需設置一個強引用(例如@property (nonatomic, retain)
)。如果這還不夠,你可以撥打[id<NSCopying> copy]
感覺就像你使用核心數據對象和某種tableview。使用nsfetchedresultscontroller,你會忘記同步問題。順便說一句,保持某個地方managedObjects是不安全的。可能你可以複製並設置managedObjectContext屬性爲nil,使其與數據庫分離,但這些對象將不是最新的。
我有一個NSManagedObjectContext和數據庫對象的所有請求都經過它,然後在我加載程序並保存它們之後,如何將它們傳遞給具有私有上下文的視圖控制器? – 2014-10-03 07:08:59
我已經更新了我的答案。 – 2014-10-03 13:35:06
非常感謝您的配合,您絕對正確。 – 2014-10-04 18:39:47