1

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 がデータベースではなく、オブジェクトグラフであることは知っています。

ありがとう。

4

1 に答える 1