Objective-c – 最佳实践 – iOS中的NSManagedObjectContextObjectsDidChangeNotification

我正在使用Core Data编写我的第一个综合应用程序,我想看看跟踪各种对象更改/更新/删除的最佳方法.例如,我有一个Notes实体和一个Location实体,并且它们之间有一对一的关系,这个想法是每个注释都可以标记它的位置.然后,我有一个带有fetchedResultsController的UITableView驱动列表(您可以在其中添加新的注释并附加日期和位置),但是我有2个其他视图控制器,一个具有地图视图,一个具有日历视图.地图视图将获取位置中的所有位置,并将其显示在地图上.日历视图基本上从Notes中获取所有数据,只是在日历视图中显示.
如何跟踪我的日历和地图视图中Notes和Location的更改?在viewDidLoad中加载它们很简单,但是如何跟踪所有更改,以便在用户重新访问地图视图时(例如),他/她也会看到最新的数据.

我解密的一种方法是在地图视图和日历视图中的NSManagedobjectContextObjectsDidChangeNotification中监听通知.这似乎从托管上下文返回所有插入,删除和更新的对象,每次都有保存.我可以通过这些对象,看看是否需要更新我的观点.这就是我在想这样做:

在MapViewController viewDidLoad中:

[[NSNotificationCenter defaultCenter]
    addobserver: self
    selector: @selector(objectChangednotificationReceived:)
    name: NSManagedobjectContextObjectsDidChangeNotification
    object: context];

然后:

- (void) objectChangednotificationReceived: (NSNotification *) notification
{
    NSArray* insertedobjects = [[notification userInfo]
                                objectForKey:NSInsertedobjectsKey] ;
    NSArray* deletedobjects = [[notification userInfo]
                               objectForKey:NSDeletedobjectsKey] ;
    NSArray* updatedobjects = [[notification userInfo]
                               objectForKey:NSUpdatedobjectsKey] ;
    NSLog(@"insertObjects: %@",[insertedobjects description]);
    NSLog(@"deletedobjects: %@",[deletedobjects description]);
    NSLog(@"updatedobjects: %@",[updatedobjects description]);

    for (NSManagedobject *obj in insertedobjects) {
        if ([obj class] == [Location class]) {
            NSLog(@"adding a new location");
            Location *locationObj = (Location *) obj;
            [self.mapview addAnnotation: locationObj];
        }
    }
}

这似乎是对的吗?似乎很多冗余代码放入每个视图控制器,特别是如果我对多个NSManagedobject感兴趣的话.还有其他一些我失踪的技术吗?

解决方法

NSFetchedResultsController似乎符合您的要求.它将有效地管理核心数据的数据处理.您为日历视图控制器和地图视图控制器重新使用相同的提取请求.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...