2013-05-02 97 views
1

我知道核心數據使NSManagedObjectId作爲其主鍵。如何避免核心數據中具有唯一鍵的重複插入?

現在,在這樣的場景中,msgId對於消息記錄是唯一的。

Thread A嘗試將帶有msgId 1001的消息插入到上下文中。在插入之前,thread A已嘗試使用密鑰msgId和值1001查找消息。沒有發現任何東西,所以它執行插入操作。

與此同時,Thread B對msgId爲1001的消息也做同樣的事情。

因此,隨着時間------------->

Thread A:發現 - >插入 - >保存

Thread B:發現 - >插入 - - > save

線程A &線程B有自己的上下文,它們查找,插入和保存,所以帶有msgId 1001的消息可能被插入兩次並重復保存到磁盤。

也許我可以使用串行隊列DISPATCH_QUEUE_SERIAL逐一製作find-insert-save操作來避免這個問題。但我想知道是否還有其他方法可以做到這一點,比如主鍵?是的,我知道Core Data不是數據庫,而是一個對象圖。

謝謝。

回答

0

賈森·李,

我通過執行所有的刀片在後臺隊列和追趕的-didSave通知開始浮現在UI項目解決這個問題。這保證了在創建項目時對其進行單一訪問。之後,對於已知的唯一ID,多線程訪問始終是允許的。

Andrew