0

我有以下核心数据实体(管理对象)之间的关系层次:更新的UITableView当相关NSManagedObject更新

ENTITY1> ENTITY2> ENTITY3

有一个一比一的关系在Entity1Entity2之间,以及Entity2Entity3之间的一对多关系。

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

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

回答

4

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

[self willChangeValueForKey:@"someProperty"]; 
[self didChangeValueForKey:@"someProperty"]; 

关于您要更新的实体。

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

NSFetchedResultsController pitfall

希望有所帮助。

+1

这是一个不错的诀窍。 - 不用重写相关实体的访问器方法(如链接中所建议的),也可以侦听“NSManagedObjectContextObjectsDidChangeNotification”,如果“Entity2”或“Entity3”对象已更改,则将相关的“Entity1”对象标记为脏。 - 另一个想法:为“Entity1”添加一个瞬态“虚拟”属性。要将对象标记为脏,只需将值赋给dummy属性即可。 –

+0

@MartinR感谢您的其他建议。 ;) –

+0

willChange/DidChange显然不工作(已经不再),也没有设置一个值为零,然后回到真正的值...这对我来说这个窍门是引入了一个短暂的“脏”属性,并设置到时间戳。 – TheEye