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 视图单元做类似的事情,所以性能应该不是问题。
至于复杂度,您只需编写一次此代码,而不必考虑部分情况,因此应该更少复杂度。
我的表格视图单元格非常复杂,无法为每个 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 视图单元做类似的事情,所以性能应该不是问题。
至于复杂度,您只需编写一次此代码,而不必考虑部分情况,因此应该更少复杂度。