3

2 つのエンティティを含むマネージド オブジェクト モデルがあります。

エンティティの 1 つ ( EAと呼びましょう) は、2 番目のエンティティ ( EBと呼びます) のサブセット内のいくつかのプロパティを参照して、そのプロパティを計算します。

EA内で、必要なEBオブジェクトのサブセットを返す述語を使用して「フェッチされたプロパティ」を設定しました。

EBオブジェクトを削除、挿入、または EB オブジェクトを変更するときは、通知を使用してEAが最新の状態に保たれるようにします。たとえば、「保存」した後、EAオブジェクトはそのプロパティを再計算します。

私の問題は、フェッチされたプロパティにアクセスすると ( EBモデル クラス内でを使用して行う)、キャッシュされたバージョンのみを抽出するように見えることです。つまり、初回は問題ありませんが、別のEAオブジェクトを追加すると、取得したプロパティにアクセスしたときに、返された配列にそれが表示されません。オブジェクトを削除すると、このオブジェクトが存在しなくなったためにクラッシュするため、これは最も明白です。[self valueForKey:FetchedPropertyKeyName]

フェッチされたプロパティのドキュメントには、次のように記載されています。

宛先エンティティのオブジェクトが変更された場合は、フェッチされたプロパティを再評価して最新であることを確認する必要があります。プロパティを手動で更新するには、refreshObject:mergeChanges: を使用します。これにより、次にオブジェクトの障害が発生したときに、このプロパティに関連付けられたフェッチ リクエストが再度実行されます。

ばかげた質問に聞こえる場合は申し訳ありませんが、残念ながらどこに電話すればよいかわかりませんrefreshObject:mergeChanges:??

4

1 に答える 1

9

質問を書くという規律により、コードをもう一度詳しく調べたので、解決策がわかりました!

追加した:

[[self managedObjectContext] refreshObject:self mergeChanges:YES];

観察方法へ。これによりフェッチが発生し、awakeFromFetch メソッドですべてのプロパティを再評価し、フェッチされたプロパティに期待どおりの新しいデータが含まれるようになりました。

于 2010-09-23T13:28:44.910 に答える