2012-02-22 121 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

相關問題