この場合に発生する問題を解決しようとしています:
- ユーザーは外部ソースからデータの読み込みを開始できます。データが読み込まれると、CoreData を介して保存されます。次に、いくつかのビューに表示され、他のいくつかのクラスが NSManagedObjects への参照を取得しました。
- データの読み込みは、他の条件 (たとえば、アプリケーションがバックグラウンドから再開したとき) によって開始される場合があります。新しい外部データが受信され、dataController は以前のデータを削除して新しいデータを作成します。そして、ここに問題があります。すべてのデータ コンシューマー クラスに、新しいインスタンスをロードする必要があることを通知したいと思います (削除されたオブジェクトへの参照を送信して、所有する参照と比較し、新しいデータ バージョンを要求するかどうかを判断できるようにします)。しかし、コンシューマー クラスを削除した後、プロパティのない障害への参照があり、その ObjectID は役に立たず (新しいインスタンスが保存されたため)、その新しいバージョンをどのようにロードするかわかりません。
NSManagedObject ラッパーを実装できます。
@interface Model : NSObject
- (id)initWithUniqueId:(id)uniqueId dataObject:(NSManagedObject *)dataObject;
@property (nonatomic, strong, readonly) id uniqueId;
@property (nonatomic, strong, readonly) NSManagedObject *dataObject;
@end
このオブジェクトは、dataObject がフォルトになった後に自身を再ロードできます。しかし、このアプローチは間違っていて、このオーバーヘッドは必要ないのではないでしょうか? また、NSManagedObject は、更新ではなく、本当に削除された場合にのみ削除する必要がありますか? オブジェクトが更新された場合は、KVO を使用してプロパティの変更を処理できます。オブジェクトが削除された場合は、変更の NSManagedObjectContext 通知を監視し、削除されたオブジェクトを探すことができます。
私はあなたがどの方法を好むのか、そしてその理由を知りたいだけです(おそらく他のアプローチが好きかもしれません)?前もって感謝します。