簡體   English   中英

Singleton如何觀察核心數據模型的變化?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM