NSFetchedResultsChangeUpdate - 更新对象的changedValues dictonary为空

时间:2015-02-12 13:27:12

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

对于每个NSFetchedResultsChangeUpdate changeType,我的tableview单元格非常复杂。所以我决定更新它只是为了改变MO的具体变化。

我想,MO的changedValues应该包含已更改的属性。但有时它包含它们,有时它是一个空字典。当MO在不同的MOC上发生变化时,它总是为空的,如果在fetchedResultsController的MOC上发生了变化,则它包含值。 我想,如果我的ViewController要观察NSManagedObjectContextWillSaveNotification通知,那么可能会发现更改。但我不想创建一个单独的逻辑来处理更新。这是我唯一的机会吗?

欢迎任何想法如何在fetchedResultsController委托中获取MO的更改!

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type newIndexPath:(NSIndexPath *)newIndexPath {
if (controller == _fetchedResultsController){

        switch (type) {
            case NSFetchedResultsChangeUpdate: {
                for (NSString *name in [anObject changedValues]) {
                     NSLog(@"Changed property: %@",name);
                     //Make some cell update corresponding the changed attribute
                }
            break;
            }
        default:
        break;
       }
}

我认为另一个解决方案可能是获取给定的tableViewCell并比较MO和单元格之间的相关和可变值。但我不想在我的单元格中添加这种业务逻辑。

1 个答案:

答案 0 :(得分:0)

我通常这样做的方法是给单元格一个属性来描述要显示的内容并覆盖单元格中的setProperty以根据新数据重新配置它。

无论如何,您必须为回收表视图单元格执行类似操作,因此性能不应成为问题。

至于复杂性,你必须只编写一次这段代码,而不必考虑部分情况,因此应该更少复杂性。