NSFetchedResultsChangeUpdate - 更新对象的 changedValues 字典为空

NSFetchedResultsChangeUpdate - updated object's changedValues dictonary is empty

我的表格视图单元格非常复杂,无法为每个 NSFetchedResultsChangeUpdate changeType 完全重新布局。所以我决定只针对更改后的 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 和单元格之间的相关和可变值。但我不想添加我的单元格的这种业务逻辑。

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

你无论如何都必须为回收 table 视图单元做类似的事情,所以性能应该不是问题。

至于复杂度,您只需编写一次此代码,而不必考虑部分情况,因此应该更少复杂度。