我知道核心數據使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不是數據庫,而是一個對象圖。
謝謝。