8

NSMergeByPropertyObjectTrumpMergePolicyNSOverwriteMergePolicy一つの点で同じです。プロパティは、ストア内のものを上書きします。

では、それらの違いは何ですか?すべての場合において、永続ストア内のものが変更されたかどうかに関係なく、プロパティは永続ストアをオーバーライドします。

また、紛争とは何ですか?

対立とは、単にデータが異なることを意味すると思いました。これは、コアデータが元々設計されており、一度データを書き込むと更新できないことを意味しますか?

NSOverwriteMergePolicy競合が単なる「データの違い」とは異なる場合、との違いは何NSErrorMergePolicyですか?

どちらの場合も、単なるデータの違いはとにかく競合ではないため、競合は発生しません。

4

1 に答える 1

12

これは、コアデータは、一度書き込んだデータは更新できないように設計されているということですか?

いいえ、それではあまり役に立ちませんよね?

また、紛争とは何ですか?

Core Data では、複数の管理対象オブジェクト コンテキスト (MOC) が同じデータ ストアにアクセスしている場合に競合が発生する可能性があります。これは、マルチスレッド アプリでは一般的です。各 MOC は、他とは独立して変更を保存できます。しかし、すべてのスレッドでデータの一貫したビューを維持したいので、変更が 1 つの MOC に保存されたことを通知され、それらの変更を別のコンテキストにマージすることができます。これにより、コンテキストが同期されます。

しかし、変更を MOC にマージしようとして、同じデータに対して保存されていない別の変更があった場合はどうなるでしょうか? 同様に、両方の MOC が同じインスタンスの同じ属性を変更し、それを異なる値に変更しました。これは、競合が発生したときです。変更をマージしようとすると、結果は MOC のマージ ポリシーによって異なります。デフォルトでは を使用しますNSErrorMergePolicy。これは、マージが失敗し、コードで競合を整理して解決する必要があることを意味します。競合にさまざまな自動解決スキームを適用する組み込みのマージ ポリシーがいくつかあります。

組み込みの 4 つの解決スキームにより、ディスク上の変更またはメモリ内の変更が優先されます。また、競合しないメモリ内の変更を処理する方法も異なります。たとえばNSMergeByPropertyStoreTrumpMergePolicy、他の MOC からの変更と一致するようにメモリ内の競合する変更を更新しますが、競合しない変更はそのまま残します。NSRollbackMergePolicy他の MOC からの新しい変更と競合しない場合でも、メモリ内の変更を完全に破棄するという点で異なります。組み込みのスキームが適切でないと思われる場合は、独自のマージ ポリシーを作成することもできます。

どちらの場合も、単なるデータの違いは競合ではないため、競合が発生することはありません。

競合が発生することは間違いありません。これは非常に一般的なシナリオです。

于 2013-01-25T17:35:44.153 に答える