我有一个经典的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