Ios 更新相关NSManagedObject时更新UITableView

Ios 更新相关NSManagedObject时更新UITableView,ios,core-data,nsfetchedresultscontroller,nsmanagedobjectcontext,Ios,Core Data,Nsfetchedresultscontroller,Nsmanagedobjectcontext,我在核心数据实体(托管对象)之间有以下关系层次结构: 实体1>实体2>实体3 Entity1和Entity2之间存在一对一的关系,Entity2和Entity3之间存在一对多的关系 我有一个视图控制器,它使用NSFetchedResultsController显示Entity1记录的列表。UITableViewCell显示来自Entity1、Entity2和Entity3的信息。现在,当添加/更新/删除Entity1对象时,会自动调用NSFetchedResultsControllerDeleg

我在核心数据实体(托管对象)之间有以下关系层次结构:

实体1>实体2>实体3

Entity1
Entity2
之间存在一对一的关系,
Entity2
Entity3
之间存在一对多的关系

我有一个视图控制器,它使用
NSFetchedResultsController
显示
Entity1
记录的列表。
UITableViewCell
显示来自
Entity1
Entity2
Entity3
的信息。现在,当添加/更新/删除
Entity1
对象时,会自动调用
NSFetchedResultsControllerDelegate
方法,但当添加/更新/删除相关的
Entity2
Entity3
记录时,不会调用委托方法


在这种情况下,识别相关记录已被更新,并且
UITableViewCell
也需要更新的最佳或可能的方法是什么?

您需要弄脏其他实体的属性。换句话说,你应该打电话

[self willChangeValueForKey:@"someProperty"];
[self didChangeValueForKey:@"someProperty"];
在要更新的实体上

这里是一个示例解决方案,它可以实现您想要实现的目标


希望这有帮助。

您需要弄脏其他实体的属性。换句话说,你应该打电话

[self willChangeValueForKey:@"someProperty"];
[self didChangeValueForKey:@"someProperty"];
在要更新的实体上

这里是一个示例解决方案,它可以实现您想要实现的目标


希望这会有帮助。

这是一个好把戏除了覆盖相关实体的访问器方法(如链接中所建议),还可以侦听
nsManagedObjectContextObjectsIDChangeNotification
,如果“Entity2”或“Entity3”对象已更改,则将相关的“Entity1”对象标记为脏对象。-另一个想法是:在“Entity1”中添加一个临时的“dummy”属性。若要将对象标记为脏对象,只需为dummy属性指定一个值即可。@MartinR感谢其他建议。;)willChange/DidChange显然不起作用(不再起作用),将值设置为nil然后再返回实际值也不起作用。。。为我做到这一点的诀窍是引入一个瞬态“脏”属性并将其设置为时间戳。这是一个很好的诀窍。-除了覆盖相关实体的访问器方法(如链接中所建议),还可以侦听
nsManagedObjectContextObjectsIDChangeNotification
,如果“Entity2”或“Entity3”对象已更改,则将相关的“Entity1”对象标记为脏对象。-另一个想法是:在“Entity1”中添加一个临时的“dummy”属性。若要将对象标记为脏对象,只需为dummy属性指定一个值即可。@MartinR感谢其他建议。;)willChange/DidChange显然不起作用(不再起作用),将值设置为nil然后再返回实际值也不起作用。。。为我做到这一点的诀窍是引入一个瞬态“dirty”属性并将其设置为时间戳。