2012-02-22 80 views
3

下面是一个简单的场景:假设我有两个核心数据实体:AB具有一对多关系。 (A可以指向很多B)。 当创建NSFetchedResultsController获取所有A对象时,更改任何A对象的属性将触发controllerDidChangeContent委托方法。但是,更改B对象的属性不会触发此方法。 (尽管已更改的B对象被A对象之一引用)为什么controllerDidChangeContent未被调用?

任何想法为什么?

+0

你可以将你的代码发布到你创建'NSFetchedResultsController'的地方吗?机会是你需要一个不同的谓词。 – MishieMoo 2012-02-22 18:35:34

+0

我故意简化了上面的场景,因为我的代码要复杂得多......你能提出谓词如何与这个问题相关吗? – Joshua 2012-02-22 18:39:10

+0

@吉姆的评论接近这个问题。如果您正在寻找'A',但您在'B'上更改属性,您的控制器不会更改任何内容,因为它正在查看'A',而不是'B'。 – MishieMoo 2012-02-22 19:10:45

回答

7

这花了一些时间让我的头靠它。提取的结果控制器评估其管理对象上下文的更改。如果这些更改满足为其提取设置的条件,则这些更改只会触发提取的结果控制器委托方法。这包括匹配谓词条件。

如果您的控制器正在获取类型A的实体,那么它只会对类型B的实体的变化做出反应,如果对B的变化影响A中的内容(并且匹配谓词条件也可能是排序描述符)。

你能在上面的问题中显示谓词吗?你能展示A和B之间的关系吗?

+0

不知道我得到它......理论上如何可以改变乙影响什么是在A?这些是两个不同的对象封装好(说A是作者,B是书) – Joshua 2012-02-22 18:58:01

+1

你正在回答你自己的问题。如果对B的更改不会影响A,那么您为什么期望提取的结果控制器能够识别该更改。除非有关系改变。显示谓词,你可能会发现真正发生的事情。 – Jim 2012-02-22 19:12:15

+0

我发布了一个与此问题有关的新问题,显示所有相关的代码。如果你能看一看,那会很棒。 http://stackoverflow.com/questions/9446758/why-nsfetchedresultscontroller-is-not-being-updated-with-new-data – Joshua 2012-02-26 12:47:40

相关问题