同期ソリューションの一部としてsync status
、特定のクラスのすべてのオブジェクトに対して を使用します。そのオブジェクトの特定の (すべてではない) 属性が変更されるたびに、ステータスを更新したいと考えています。
私は4つのアプローチを検討しています:
- 同期する必要があるものを変更するたびに、コードでステータスを手動で設定します。これは最も明白ですが、最も面倒でエラーが発生しやすい方法でもあります (新しい機能を追加するときはいつでも、同期ステータスの更新も忘れずに追加する必要があります)。
- コア データ通知 (
willSave
または などNSManagedObjectContextObjectsDidChangeNotification
) を使用して追跡します。一見すると、これが最も適切に思えます。AppDelegate で通知にサインアップし、毎回ステータスを更新するだけです。しかし、変更を調べて、気になる属性が更新されたときにのみ同期ステータスを更新することは可能でしょうか? また、設定sync_status
自体もこの通知を起動し、無限ループに陥りませんか? これにどのように対処しますか? - 気になる属性のカスタムセッター。以前はこれを機能させるのに苦労したことがあり、最終的には標準のコア データ ゲッター/セッターをそのままにしておくことにしました。しかし、それが最適である場合、私は掘り下げます。
- KVO。私は以前にこのパターンを使用したことはありませんが、関心のある属性の変更の通知にサインアップして、そこにフラグを設定するのが最も簡単かもしれません. しかし、どこでこれを行うのでしょうか? クラスのすべてのオブジェクトを監視する必要があるため、同じオブジェクトで属性の KVO 通知を観察することは可能でしょう
awakeFromInsert
か? つまり、オブジェクトが作成されるたびに、すぐに同じオブジェクトが attributeA への変更をリッスンし、sync_status
起動時に独自のオブジェクトを設定しますか?
これらのアプローチのどれが私に最も役立つでしょうか? おそらく私はいくつかの他のアイデアを見逃していますか?