我的應用程序使用核心數據(有一些魔法記錄的幫助),並且使用NSOperation
進行了相當嚴重的多線程操作。核心數據-existingObjectWithID:錯誤:導致錯誤133000
當然,我非常小心只能在線程/操作之間傳遞NSManagedObjectID
。
現在,要回在操作相應的管理對象,我用-existingObjectWithID:error:
這樣的:
Collection *owner = (Collection *)[localContext existingObjectWithID:self.containerId error:&error];
但我得到的回覆是零和error
說,這是一個錯誤#13300:NSManagedObjectReferentialIntegrityError
。
這裏是什麼文件說,關於這個錯誤:
NSManagedObjectReferentialIntegrityError
Error code to denote an attempt to fire a fault pointing to an object that does not exist.
The store is accessible, but the object corresponding to the fault cannot be found.
這是不是在我的情況屬實:該對象存在。事實上,如果我遍歷Collection
實體的所有實例與NSFetchRequest
,我發現其中,它的NSManagedObjectID
正是我傳遞給-existingObjectWithID:error:
。
此外,如果我使用-objectWithID:
來替代,我會得到一個正確的對象。
所以有一些我失蹤了。這裏有一些額外的觀察/問題:
- 「一個不存在的對象」:那句話中「存在」的含義是什麼? 「存在」在哪裏?當然,它在我的核心數據存儲中是「存在」的。
- 「無法找到與錯誤對應的對象」:該句子中「找到」的含義是什麼? 「找到」在哪裏?這一點在我的Core Data商店中肯定會「找到」。
所以也許我缺少關於什麼existingObjectWithID:error:
做一些事情?該文檔說:
If there is a managed object with the given ID already registered in the context, that object is returned directly; otherwise the corresponding object is faulted into the context.
[...]
Unlike objectWithID:, this method never returns a fault.
這不會幫助我的問題。我不介意讓我的對象完全失敗,而不是一個錯誤。實際上,當我訪問對象屬性時,其中的任何錯誤都會在下一個代碼行中觸發。
- 什麼是導致
NSManagedObjectReferentialIntegrityError
的現實情況?
感謝您的任何啓示。
你有沒有想過這個?我遇到同樣的問題,我的對象肯定在那裏,保存操作正在運行,但它只是偶爾發生。 – Adam 2013-04-16 06:38:04