![](/img/trans.png)
[英]Does Swift have a way to observe changes not just to an object, but to a reference?
[英]How does one have a Singleton Observe Changes to Core Data Model?
如何使用Singleton Object觀察對CoreData的更改?
在我的應用程序中,每次用戶添加新的CoreData FoodEntry時,我都想通知我的Singleton,它將匯總當天的卡路里總量,然后將通知我的ViewController當天的卡路里總量已發生變化,並且可以更新UI 。 因此,Singleton正在觀察CoreData上下文,而viewController在觀察Singleton數字緊縮類。
到目前為止,我的計划是實現單例並讓其訂閱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
這行的結尾是流氓分號...嗎?
- (void)handleDataModelChange:(NSNotification *)note;
驚訝的是您在這里沒有得到編譯錯誤。NSLog(@“%@對象已更新,%@對象
Deleted, %@ Objects Inserted",[updatedObjects count],[deletedObjects count],[insertedObjects count]);
第一個占位符用於對象,但是[deletedObjects count]返回NSUInteger。 %i可能會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.