シングルトン オブジェクトを使用して CoreData の変更を監視するにはどうすればよいですか?
私のアプリでは、ユーザーが新しい CoreData FoodEntry を追加するたびに、その日の総カロリーを合計する Singleton に通知したいので、その日の総カロリーが変更され、UI を更新できることが ViewController に通知されます. したがって、Singleton は CoreData コンテキストを監視し、viewController は Singleton 数値計算クラスを監視しています。
これまでの私の計画は、シングルトンを実装し、それをサブスクライブさせてからNSManagedObjectContextObjectsDidChangeNotification
、コールバック メソッドで数値を処理するhandleDataModelChange
ことです ...2 つのエラーが発生しています
CoreData: エラー: 重大なアプリケーション エラーです。コア データの変更処理中に例外がキャッチされました。これは通常、 のオブザーバ内のバグですNSManagedObjectContextObjectsDidChangeNotification
。
+[FitWrench handleDataModelChange:]:
クラス 0x27a58 に送信された認識されないセレクター
managedObjectContext を保存するときに発生する例外ブレークポイントを設定しましたが、それを取得して userInfo...=(
@implementation Singleton
+ (Singleton *) sharedInstance
{
static Singleton *sharedInstance = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[Singleton alloc] init];
// Do any other initialisation stuff here
AppDelegate *appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *myManagedObjectContext = appDelegate.managedObjectContext;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleDataModelChange:)
name:NSManagedObjectContextObjectsDidChangeNotification
object:myManagedObjectContext];
});
return sharedInstance;
}
- (void)handleDataModelChange:(NSNotification *)note;
{
NSSet *updatedObjects = [[note userInfo] objectForKey:NSUpdatedObjectsKey];
NSSet *deletedObjects = [[note userInfo] objectForKey:NSDeletedObjectsKey];
NSSet *insertedObjects = [[note userInfo] objectForKey:NSInsertedObjectsKey];
// Do something in response to this
NSLog(@"%@ Objects Updated, %@ Objects Deleted, %@ Objects Inserted",[updatedObjects count],[deletedObjects count],[insertedObjects count]);
}
@end