Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 将CoreData更改传播到相关对象_Ios_Objective C_Core Data_Nsmanagedobject - Fatal编程技术网

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
通知进行过滤。就我个人而言,根据我的经验,过滤通知更干净、更易于维护。