我有一個應用程序設置很像iCloudCoreDataRecipes示例(即使用Core Data與iCloud一起使用)。在應用程序的委託,我觀察在iCloud通知中訪問已刪除的對象
NSPersistentStoreDidImportUbiquitousContentChangesNotification
當一個通知到達,我叫
[context mergeChangesFromContextDidSaveNotification:note];
我有一些額外的處理,我想當收到此通知的事,但我有麻煩使用由NSManagedObjectID標識的對象存在於NSDeletedObjectsKey集合中。
NSSet *deletedObjects = [info objectForKey:NSDeletedObjectsKey];
for (NSManagedObjectID *oid in deletedObjects) {
NSManagedObject *obj = [context objectWithID:oid];
}
如果我訪問了OBJ任何財產,它是零。
我又試圖在調用mergeChangesFromContextDidSaveNotification運行上面的代碼:
當我這樣做,我能,大部分時間,訪問對象的屬性。在某些情況下,我會收到的例外,無法履行故障;該記錄已從核心數據存儲中刪除。
我意識到,如果在通知到達之前(即,如果在應用程序中查看/訪問對象)某個對象已加載到上下文中,則訪問已刪除對象的屬性將會起作用。
我的問題是,我想做一些清理與刪除的對象相關;我的NSManagedObject擁有一個我想閱讀的屬性,然後用它在與該值相關的Core Data之外執行一些工作。
我錯過了什麼?是否有可能做到這一點?
謝謝,這可能會奏效。它會在mergeChangesFromContextDidSaveNotification之前調用受影響的對象:但重要的是屬性值存在而不是零。在非iCloud場景中,可以從通知的userInfo(插入,更新或刪除)中提取NSManagedObjects並使用它們,因此我原本期望類似。 – azsromej
這個答案應該有成千上萬的upvotes! :)我花了很多時間嘗試執行基於對象的屬性的簡單操作,當它們被刪除並敲擊牆壁時,因爲我正在響應NSDeletedObjectsKey通知,當實際對象沒有響應時,不再存在,其屬性不能被訪問。非常感謝您的先生,我希望很多人能夠像我一樣浪費大量時間來找到您的答案! – cdf1982