コアデータと通知について質問があります。Appleのドキュメントを読んだ後、答えが見つかりませんでした。
これが問題です
。1対多の関係を持つ管理対象オブジェクトがあります。オブジェクトがこの関係に追加または削除された時期を知りたいのですが。(「カテゴリ」には多くの「アイテム」があります)これを使用して、アイテムのカテゴリがいつ追加または削除されるかを確認します。
[category addObserver:self forKeyPath:@"items"
options:NSKeyValueObservingOptionOld | NSKeyValueObservingOptionNew
context:nil];
そして、このメソッドは次のように呼び出されます。
- (void)observeValueForKeyPath:(NSString *)keyPath
ofObject:(id)object change:(NSDictionary *)change context:(void *)context;
問題:
カテゴリに2つのアイテムがあり、そのうちの1つを削除するとします。現在、カテゴリには1つのアイテムしかありません。ただし、からフェッチされたリクエストを起動するobserveValueForKeyPath
と、カテゴリに2つのアイテムがあると表示されますが、現在は1つあるため、これは誤りです。
observeValueForKeyPath
これは、コンテキストが保存されているときに呼び出されるためだと思います(これは、Appleのドキュメントで見つけた唯一のことです)。おそらく、行が終了[context save:&error]
するまで変更は有効ではありません。[context save:&error]
したがって、理論をテストするために、observeValueForKeyPath
コードを変更し、すべてのコードをメソッド内に移動して、次を使用しました。
[self performSelector:@selector(launchFetchedRequest)
withObject:nil afterDelay:0];
そのメソッドを実行するために、次の実行ループ、つまり。の後[context save:&error]
。そして、voilá、すべてが今うまくいきます。
したがって、内部observeValueForKeyPath
でフェッチリクエストを起動する場合、次の実行ループで起動する必要がありますか?これは正常な動作ですか?通常、これをどのように行いますか?
このトピックについてのあなたの考えを知りたいです。前もって感謝します。