4

我有一個經典的CoreData應用程序,顯示它的數據在綁定NSTableView(全部用XCode 4.2完成)。setFilterPredicate對NSArrayController不起作用,如果它在「自動重新安排內容」

工作正常,直到我決定昨天在Attributes Inspector中檢查ArrayController的'Auto Rearrange Content'。現在,當我嘗試設置過濾謂詞就可以了,我得到:

[<_NSFaultingMutableSet 0x102b65950> addObserver:forKeyPath:options:context:] is not supported. Key path: name 

請記住,如果沒有這個選項,它完美地工作:謂語是好的,則控制器可以正常過濾它的管理的內容,以及表視圖僅顯示與謂詞相匹配的實體。

當然,我可以取消啓用此「自動重新排列內容」,但對於在實體發生更改時維護排序順序很有用。如果我編輯一個實體,「修改日期」更改,並且由於我的排序順序是在這個日期,我希望TableView自動重新排序它的行。它與這個選項一起使用,但是增加了「不支持addObserver」的bug。

_NSFaultingMutableSet來自相關實體中的一對多關係,因此是「Set」。也許「自動重新排列內容」與具有多對多關係的「setFilterPredicate」不兼容?

任何人有類似的問題? NSArrayController的內部錯誤?

注意:導致問題的謂詞的形式爲

name CONTAINS[cd] %@ OR ANY aliases.name CONTAINS[cd] %@ 

ANY tags.name CONTAINS[cd] %@ OR ANY tags.aliases.name CONTAINS[cd] %@ 

這似乎是 '任意' 會引起一些衝突...

+0

顯然我需要使用子查詢,每當我走一個關鍵路徑跨多對多的關係?請參閱:http://stackoverflow.com/a/3646030/1040553 – malaba

回答

4

找到了一個解決方案,並對SUBQUERY進行了上述評論。

請選擇 '自動重新編排內容',但改變謂詞:

name CONTAINS[cd] %@ OR SUBQUERY(aliases, $anAlias, $anAlias.name CONTAINS[cd] %@)[email protected] != 0 

SUBQUERY(tags, $aTag, $aTag.name CONTAINS[cd] %@)[email protected] !=0 OR SUBQUERY(tags, $aTag, $aTag.aliases.name CONTAINS[cd] %@)[email protected] !=0 

分別。

也許這個謂詞錯了,我之前沒有遇到別人的問題。