Core Data が NSManagedObjectId を主キーにすることは知っています。
さて、このようなシーンでは、msgId はメッセージ レコードに対して一意です。
Thread AmsgId 1001 のメッセージをコンテキストに挿入しようとします。挿入の前に、キーと値thread Aでメッセージを見つけようとしました。何も見つからなかったため、挿入アクションを実行します。msgId1001
その間、Thread BmsgId を使用してメッセージに対して同じことを行っています1001。
では、その時として -------------->
Thread A: 検索 --> 挿入 --> 保存
Thread B: 検索 --> 挿入 --> 保存
スレッド A とスレッド B の両方に独自のコンテキストがあり、検索、挿入、保存するため、msgId を含むメッセージが10012 回挿入され、ディスクに繰り返し保存される可能性があります。
この問題を回避するために、シリアル キューを使用して 1 つずつ操作DISPATCH_QUEUE_SERIALを行うことができるかもしれません。find-insert-saveしかし、主キーなど、それを行う他の方法があるのだろうか?はい、Core Data がデータベースではなく、オブジェクトグラフであることは知っています。
ありがとう。