0

シングルトン オブジェクトを使用して 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
4

2 に答える 2

0

この行の最後にあるのは不正なセミコロンですか...?

- (void)handleDataModelChange:(NSNotification *)note;
于 2012-07-17T09:17:09.970 に答える
0

ここでコンパイルエラーが発生しないことに驚いた.NSLog(@"%@ Objects Updated, %@ Objects

Deleted, %@ Objects Inserted",[updatedObjects count],[deletedObjects count],[insertedObjects count]);

最初のプレースホルダーはオブジェクト用ですが、[deletedObjects count] は NSUInteger を返します。%i の方がうまくいくでしょう。

于 2012-07-17T10:29:41.367 に答える