我知道核心数据使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不是数据库,而是一个对象图。
谢谢。