如何使用Singleton对象观察对CoreData的更改?
在我的应用程序中,每当用户添加新的CoreData FoodEntry时,我想通知我的Singleton,它将总结当天的卡路里总数,然后我的ViewController将被通知当天的卡路里总数已经改变,它可以更新UI。所以Singleton正在观察CoreData上下文,viewController正在观察Singleton数字cruncher类。
到目前为止我的计划是实现单例并让它订阅NSManagedObjectContextObjectsDidChangeNotification
然后处理回调方法handleDataModelChange
中的数字......我收到两个错误
CoreData:错误:严重的应用程序错误。在Core Data更改处理期间捕获到异常。这通常是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
答案 0 :(得分:0)
在这一行的最后是一个流氓分号......?
- (void)handleDataModelChange:(NSNotification *)note;
答案 1 :(得分:0)
很惊讶你在这里没有得到编译错误.NSLog(@“%@ Objects Updated,%@ Objects
Deleted, %@ Objects Inserted",[updatedObjects count],[deletedObjects count],[insertedObjects count]);
第一个占位符用于对象,但[deletedObjects count]返回NSUInteger。 %i我可能会更好。