これは、コアデータは、一度書き込んだデータは更新できないように設計されているということですか?
いいえ、それではあまり役に立ちませんよね?
また、紛争とは何ですか?
Core Data では、複数の管理対象オブジェクト コンテキスト (MOC) が同じデータ ストアにアクセスしている場合に競合が発生する可能性があります。これは、マルチスレッド アプリでは一般的です。各 MOC は、他とは独立して変更を保存できます。しかし、すべてのスレッドでデータの一貫したビューを維持したいので、変更が 1 つの MOC に保存されたことを通知され、それらの変更を別のコンテキストにマージすることができます。これにより、コンテキストが同期されます。
しかし、変更を MOC にマージしようとして、同じデータに対して保存されていない別の変更があった場合はどうなるでしょうか? 同様に、両方の MOC が同じインスタンスの同じ属性を変更し、それを異なる値に変更しました。これは、競合が発生したときです。変更をマージしようとすると、結果は MOC のマージ ポリシーによって異なります。デフォルトでは を使用しますNSErrorMergePolicy
。これは、マージが失敗し、コードで競合を整理して解決する必要があることを意味します。競合にさまざまな自動解決スキームを適用する組み込みのマージ ポリシーがいくつかあります。
組み込みの 4 つの解決スキームにより、ディスク上の変更またはメモリ内の変更が優先されます。また、競合しないメモリ内の変更を処理する方法も異なります。たとえばNSMergeByPropertyStoreTrumpMergePolicy
、他の MOC からの変更と一致するようにメモリ内の競合する変更を更新しますが、競合しない変更はそのまま残します。NSRollbackMergePolicy
他の MOC からの新しい変更と競合しない場合でも、メモリ内の変更を完全に破棄するという点で異なります。組み込みのスキームが適切でないと思われる場合は、独自のマージ ポリシーを作成することもできます。
どちらの場合も、単なるデータの違いは競合ではないため、競合が発生することはありません。
競合が発生することは間違いありません。これは非常に一般的なシナリオです。