2012-07-17 24 views
0

如何使用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 
+0

我建議不要這樣做。我從來不需要單身來觀察CoreData上下文的變化。看看你的例子,我看到你計劃使用單個託管對象上下文來處理所有的事情,這使得你更難以創建可能不一致/無效的對象。訂閱負責管理核心數據管理對象的視圖控制器中的上下文更改。 – Eimantas 2012-07-17 09:13:11

回答

0

那是一個流氓分號這行的最後...?

- (void)handleDataModelChange:(NSNotification *)note; 
0

驚訝你沒有得到一個編譯錯誤here.NSLog(@「%@對象Updat %@對象

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

第一個佔位符是一個對象,但[deletedObjects count]返回一個NSUInteger。 %我可能會更好地工作。

+0

你說得對,謝謝......語法不是問題,雖然......這是一個凌亂的問題...... – Aaronium112 2012-07-18 21:42:00