Ios 将CoreData更改传播到相关对象
是否有一种方法可以使对象属性的更改同时“提醒”相关对象 我们的结构如下:Ios 将CoreData更改传播到相关对象,ios,objective-c,core-data,nsmanagedobject,Ios,Objective C,Core Data,Nsmanagedobject,是否有一种方法可以使对象属性的更改同时“提醒”相关对象 我们的结构如下: Image有一个名为content 类别与图像 如果相关的类别能够检测到对图像对象中属性的更改,则最好将类别包含在NSManagedObjectContextObjectsIDChangeNotification的NSUpdatedObjectsKey中。我看到一些建议表明,将sentinel属性(如needsUpdate添加到Category中)是一种很好的方法,但这似乎是一种很麻烦的处理方法 我这样做的理由是,每当
有一个名为Image
content
与类别
图像
类别
能够检测到对图像
对象中属性的更改,则最好将类别
包含在NSManagedObjectContextObjectsIDChangeNotification
的NSUpdatedObjectsKey
中。我看到一些建议表明,将sentinel属性(如needsUpdate
添加到Category
中)是一种很好的方法,但这似乎是一种很麻烦的处理方法
我这样做的理由是,每当类别
发生更改,或者每当与图像
相关联的内容发生更改时,我都需要重新加载tableview,目前,在我对nsmanagedObjectContextObjectsIDChangeNotification的观察方法中,我检查更新/删除/插入的对象是否有Image
实例或Category
实例,但是Image
实例在应用程序的其他地方使用,可能与Category
实例没有关系,在这种情况下,重新加载tableview将是一种浪费。我可以手动循环更新/删除/插入的对象,查看它们是否是与类别关联的图像
实例,但这似乎不是最好的方法
我发现这与我正在尝试的相似,但是它没有答案
如果需要更多信息,或者我的问题太复杂,请告诉我
编辑:进行了修改,希望能使我对类别
更感兴趣,因为我知道图像
对象属性中的变化,而不是关系本身的变化。我建议学习KVO(键值观察),因为该框架是专门为此而设计的。使用KVO,您可以监听特定对象的属性更改,然后对其作出反应
但是,我质疑您为什么不为此使用NSFetchedResultsController
。这就是NSFetchedResultsController的设计目的。如果我理解正确,它是关于跟踪相关对象的更改。NSFetchedResultsController本身并没有做到这一点,正如一些核心数据大师告诉我们的那样:。如果图像关系发生变化,它将触发。从我对OP的理解来看,关系会改变,而不是图像对象内部的数据。我同意使用NSFetchedResultsController
可能会有用,但是正如@MartinR所提到的,我认为它不能充分解决当前的问题(至少它本身)。我没有很好的理由解释为什么我没有使用NSFetchedResultsController
,当我最初实现tableview时,我可能对CoreData不太熟悉(因此做得很艰难),而且我从来没有找到足够的理由来重构它,以便在之后使用NSFetchedResultsController
。@MarcusS.Zarra对于这种模糊性表示抱歉,但是我感兴趣的是当图像
对象中的数据被修改时检测到变化,而不是关系被改变。我将更新这个问题,使其更加明显。那么,在这种情况下,我最初的建议仍然有效。您可以使用KVO将视图控制器添加为该数据的监视程序,也可以继续通过NSManagedObjectContextDidSave
通知进行过滤。就我个人而言,根据我的经验,过滤通知更干净、更易于维护。