文書化されていませんが、OS XとiOSの両方で動作が確認されています。セーブは、要素が異なるだけでなくNSManagedObject全体の変更としてカウントされます。あなたは、このサイト、openradar.appspot.comなどのバインディングなどのさまざまな結果についての不満を見つけることができます。この問題は明らかに疑似KVOの発火にも現れますが、まったく驚くべきことではありません。
問題を処理する最も簡単な方法(誰かが苦情を言うまで、ファーストパスのオプションを見つけたばかりの「保存したものすべてを再表示する」の後で最も単純な方法です)は、一般的な保存通知を聞き、それぞれに対して-changedValues更新されたオブジェクトを使用して、特定の更新プログラムを起動するのに興味のあるオブジェクトを選択します。
あなたのユースケースではそれほど効率が悪い場合は、関心のあるすべてのプロパティを変更するための編集スレッドフラグを収集するプロパティのカスタムアクセサ(mogeneratorは大きな助けになります)を作成できます。それを保存後に通知として送信します。
例えば、a professional sports team appはバックグラウンドで解析されたJSONフィードで常に更新されています。 NSManagedObjectsには、{playerStatsChanged、teamStatsChanged、leagueRankingsChanged、yadayadayadaChanged}の構造体にフラグを設定するカスタムアクセサがあります。これは、アプリケーション内のどのページが現在のフェッチで再表示する必要があるかに対応しています-and-parseスレッドが完了しました。それが保存されると、それはそのフラグ設定構造で一般的な「これらの画面を更新する」通知を発します。あなたはおそらく、個々の変更パス通知を、より高いレベルの「この画面を更新する」タイプのロジックに合体させているのではないでしょうか?さて、プロパティセッターレベルでは、ほとんどの合理的な使用例のために、これを行うことができる最も低いオーバーヘッドポイントです。確かにここで私たちのスポーツチームのアプリなどの定期的に取得された更新デザインのために。
通知をどのように処理していますか?通知userInfoディクショナリのNSUpdatedObjectsKeyを調べる必要があります。 – random
私はこのメソッドを実装しました: - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)オブジェクトの変更:(NSDictionary *)コンテキストの変更:(void *)context; – aloo
変更の辞書を見て、古い値を見て、現在の値から変更されているかどうかを調べることができました。しかし、nsmanagedオブジェクトが与えられたキーパスに対して変更されていない場合、KVO通知を最初に取得するのはなぜですか? – aloo