0

如何使用单例对象观察 CoreData 的变化?

在我的应用程序中,每当用户添加一个新的 CoreData FoodEntry 时,我想通知我的 Singleton 它将总结当天的卡路里总量,然后我的 ViewController 将被通知当天的卡路里总量已经改变并且它可以更新 UI . 所以 Singleton 正在观察 CoreData 上下文,而 viewController 正在观察 Singleton number cruncher 类。

到目前为止,我的计划是实现单例并让它订阅,NSManagedObjectContextObjectsDidChangeNotification然后在回调方法中处理数字handleDataModelChange......我遇到两个错误

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 回答