我有一個經典的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] %@
這似乎是 '任意' 會引起一些衝突...
顯然我需要使用子查詢,每當我走一個關鍵路徑跨多對多的關係?請參閱:http://stackoverflow.com/a/3646030/1040553 – malaba