如何使用Singleton對象觀察對CoreData的更改?單身人士如何觀察覈心數據模型的變化?
在我的應用程序中,每當用戶添加一個新的CoreData FoodEntry時,我想通知我的Singleton將總結當天的卡路里總數,然後我的ViewController將被通知當天的卡路里總數發生了變化,可以更新UI。因此,Singleton正在觀察CoreData上下文,而viewController正在觀察Singleton數字計算器類。
我的計劃至今是實現單並將其訂閱NSManagedObjectContextObjectsDidChangeNotification
然後緊縮的號碼回調方法handleDataModelChange
......我得到兩個錯誤
CoreData:錯誤:嚴重的應用程序錯誤。核心數據更改處理期間捕獲異常。這通常是NSManagedObjectContextObjectsDidChangeNotification
的觀察者中的一個錯誤。
+[FitWrench handleDataModelChange:]:
無法識別的選擇發送到類0x27a58
我定當我保存的managedObjectContext,但我一直沒能得到它打印出來的用戶信息時發生的異常斷點... =(
@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
我建議不要這樣做。我從來不需要單身來觀察CoreData上下文的變化。看看你的例子,我看到你計劃使用單個託管對象上下文來處理所有的事情,這使得你更難以創建可能不一致/無效的對象。訂閱負責管理核心數據管理對象的視圖控制器中的上下文更改。 – Eimantas 2012-07-17 09:13:11