2010-04-16 21 views
0

我的問題類似於this one核心數據錯誤與異常第3部分

背景

我創造了大量使用NSOperations加快速度在覈心數據存儲對象。

我遵循所有核心數據多線程規則 - 我有一個單一的持久性存儲協調器和每個線程的託管對象上下文,保存時會合並回主要的託管對象上下文。

的問題

當同時運行的線程數超過1,我得到的異常登錄保存我的核心數據存儲:

NSExceptionHandler has recorded the following exception: 
NSInternalInconsistencyException -- optimistic locking failure 

我有什麼試過

我創建新實體的代碼是相當複雜的 - 它使與其他實體有關係的實體可能在一個分離中創建te線程。

如果我用一些非常簡單的代碼替換我的對象創建例程,只是製作非相關的條目,一切都很完美。

最初,除了例外情況,我得到一個保存錯誤,說核心數據由於合併失敗而無法保存。

我閱讀文檔,並意識到我需要一個關於我保存的託管對象上下文的合併策略。我設置了這個,並且如this question所述,保存錯誤消失,但仍然存在異常。

我的問題

我是否需要擔心這些例外?如果我確實需要擺脫例外情況,有關我如何做的任何想法?

回答

1

您需要捕獲該異常,然後打印出與其相關的所有信息以確定確切原因。核心數據中的例外情況非常罕見,絕對不能忽視。

但是,您沒有給我們足夠的信息來幫助您追蹤它,所以第一步是展開該異常並查看發生了什麼。

1

可可的例外是一種跡象表明,真正令人討厭的事情發生了,最好儘快退出。通常Cocoa使用返回值和輸入參數來傳達錯誤條件。

您是否爲新線程創建了新的NSManagedObjectContext? Apple文檔Multi-Threading with Core Data提供了有關Core Data多線程的指導原則。它建議:

爲每個線程創建一個單獨的管理對象 上下文和共享 單持久存儲協調。

+0

感謝您的評論本篤。我更新了我的問題,並提供了更多細節。我仔細研究了核心數據多線程指南,並花了大量時間確保使用簡單的實體創建算法,NSOperations完美地工作。我想知道解決方案是否會以不同的方式去創建對象... – 2010-04-16 14:41:49