2

iOS 5 で導入されたネストされた MOC と組み合わせた新しいキュー ベースの MOC は、よりシンプルでクリーンな同時実行モデルとして機能するようです。しかし、私には明確でないことがいくつかあります。

  1. 子 MOC は親 MOC の変更を自動的に取得しますか? それとも手動で調整する必要がありますか? 後者の場合、子を手動で更新して親の変更を組み込む方法は? (私は、物事が逆にどのように機能するかを知っています。親 MOC は、子 MOC が保存されたときに、子 MOC から変更を取得します。)
  2. 子の変更と親の変更の間に競合がある場合、子 MOC を保存するとどうなりますか? mergePolicy子 MOC と親 MOC の間の競合を解決する責任もありますか?
4

1 に答える 1

5
  1. はい、いいえ、「parentMOC を自動的に変更する」の定義に応じて。つまり、次に子が取得するときに、更新されたデータが取得されます。そうです。オブジェクトが自動的に変更されるという意味であれば、いいえ。その理由は、MOC はスクラッチパッドであり、変更しない限り変更されないためです。

  2. はい、複数の場所から同じオブジェクト/関係に変更を加える場合は、マージの競合を解決する必要があります。これは複雑な問題であり、SO の回答では十分に回答できません。Core Data Programming Guide、特に変更管理のセクションをよく読む必要があります。

編集

  1. 子 MOC でオブジェクト A を保持していて、親 MOC で関係 B を A に追加するとします。AB にアクセスすると何が得られますか? ない?子 MOC で AB を見たい場合はどうすればよいですか? refreshObject:mergeChanges: を使用して A を更新しますか、それとも objectWithID: を使用して A を再度取得しますか? 子 MOC 全体を更新する方法はありますか? 子 MOC に非常に複雑なオブジェクト ネットワークがあり、すべてのオブジェクトを 1 つずつ更新/再取得したくない (または単にできない)。

子 MOC を通してオブジェクト A を見ると、子 MOC から再取得するまで、親 MOC の変更は表示されません。親の内容を確認したい場合は、MOC で別のフェッチを実行するか、ストアから特定のオブジェクトを取得するメソッドのいずれかを使用して確認できます。ただし、副作用がある可能性があるため、各フェッチに関するドキュメントを読む必要があることを強調しなければなりません。正確な答えは、選択したアプローチによって異なります。

通常、継続的な変更を行っている場合は、子で変更を行って親にプッシュするか、DidChange 通知を処理して変更が「自動」に見えるようにする必要があります。

  1. mergePolicy はここで機能しますか?

はい。

繰り返しますが、ここで SO についてあなたに提供できる最善の答えは、「コア データ プログラミング ガイド」を紹介することです。次の 2 つのセクションに特に注意してください。

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdFetching.html#//apple_ref/doc/uid/TP40002484-SW1

https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdChangeManagement.html#//apple_ref/doc/uid/TP30001201-CJBDBHCB

于 2012-06-04T02:02:47.110 に答える