【问题标题】:Listen for changes with Delegate - Core Data使用 Delegate 监听变化 - 核心数据
【发布时间】:2012-07-22 01:53:22
【问题描述】:

我有一个从 Web 服务接收定期更新的核心数据实体。当这个核心数据实体改变它的内容时,我希望在我的一个视图控制器类上调用一个委托方法。这样我就能够更新该视图控制器上的适当数据。我该怎么做呢。

这类似于 NSFetchedResultsController 在核心数据内容更改时向表视图发送委托消息,但我不希望在这种情况下使用 NSFetchedResults 控制器。

谢谢

【问题讨论】:

    标签: objective-c ios core-data delegates nsfetchedresultscontroller


    【解决方案1】:

    如果我是你,我实际上会做一些委托以外的事情:我会使用通知。

    您可以观察“NSManagedObjectContextDidSaveNotification”,当它从您的网络服务中保存更改时,您可以在视图控制器中排队活动。

    所以,假设您想在创建视图控制器时开始这个观察,并在视图控制器完成时完成:

    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
        self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
        if (self) {
    
            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(managedObjectContextDidSave:) name:NSManagedObjectContextDidSaveNotification object:nil];
        }
        return self;
    }
    
    - (void)dealloc {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    

    然后你需要做的就是观察变化:

    - (void)managedObjectContextDidSave:(NSNotification *)notification {
        // Update your stuff here.
    }
    

    【讨论】:

    • 有什么方法可以让它特定于表吗?收听或检查对特定表所做更改的通知?
    • 对不起,正确的术语是“实体”,而不是表格。但从技术上讲,这是一回事:)
    猜你喜欢
    • 2012-05-26
    • 1970-01-01
    • 1970-01-01
    • 2019-01-16
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-06-18
    • 1970-01-01
    相关资源
    最近更新 更多