コアデータフェッチされたプロパティがキャッシュではなくコンテキストからフェッチされるようにするにはどうすればよいですか?
-
04-10-2019 - |
質問
2つのエンティティを含むマネージドオブジェクトモデルがあります。
エンティティの1つ(それを呼びましょう ea)2番目のエンティティのサブセットでいくつかのプロパティを参照することにより、プロパティを計算します(電話してください eb).
以内に ea のサブセットを返す述語で「フェッチされたプロパティ」を設定しました eb 必要なオブジェクト。
削除したら、挿入します eb オブジェクトまたは変更 eb オブジェクト私は通知を使用してそれを確保します ea 最新の状態に保たれています。たとえば、「保存」の後 ea オブジェクトは、そのプロパティを再計算します。
私の問題は、私がフェッチしたプロパティにアクセスするとき(私がすることです 以内に eb 使用したモデルクラス [self valueForKey:FetchedPropertyKeyName]
)、キャッシュバージョンを抽出するだけで表示されます。言い換えれば、初めては大丈夫ですが、別のものを追加するとき ea オブジェクトFetchedプロパティにアクセスすると、返された配列に表示されていません。このオブジェクトが存在しなくなったためにクラッシュが発生するため、これはオブジェクトを削除するときに最も明白です。
Fetched Propertiesのドキュメントには次のように書かれています。
宛先エンティティ内のオブジェクトが変更された場合、フェッチされたプロパティを再評価して、最新のものであることを確認する必要があります。 refleshobject:mergechanges:プロパティを手動で更新するには、このプロパティに関連付けられたフェッチ要求が次に発射されたときに再び実行されます。
愚かな質問に聞こえたら申し訳ありませんが、残念ながらどこに電話すべきかわかりません refreshObject:mergeChanges:
??
解決
質問を書くことの規律により、私は再びコードをよく見ましたので、私は今解決策を持っています!
追加した:
[[self managedObjectContext] refreshObject:self mergeChanges:YES];
観察方法に。これによりフェッチが発生し、すべてのプロパティを再評価するのはAwakeFromFetchメソッドであり、Fetched Propertyには予想どおりに新しいデータが含まれるようになりました。