在数组控制器上使用谓词过滤相关对象
Posted
技术标签:
【中文标题】在数组控制器上使用谓词过滤相关对象【英文标题】:Using predicates on an array controller to filter related objects 【发布时间】:2009-05-12 18:58:58 【问题描述】:我有一个使用 Core Data 和绑定的应用程序。我想要一个 NSSearchField 可以搜索绑定到 NSTableView 的 NSArrayController。数组控制器包含具有“名称”字段的核心数据对象。我已经像这样设置了 NSSearchField:
Bind To: the array controller
Controller Key: filterPredicate
Predicate Format: name contains[c] $value
这行得通。我想扩展它,以便它可以搜索与数组控制器中的对象相关的对象字段。数组控制器中的每个对象都与另一种称为“标签”的对象具有一对多关系,该对象具有称为“名称”的字段。我尝试了以下方法:
Bind To: the array controller
Controller Key: filterPredicate
Model Key Path: tags
Predicate Format: name contains[c] $value
但这不起作用。当文本输入到 NSSearchField 中时,NSTableView 中什么也没有发生。它有什么问题?
【问题讨论】:
【参考方案1】:绑定到tags
作为模型键路径尝试将搜索字段谓词绑定到键路径arrayController.filterPredicate.tags。由于数组控制器的 filterPredicate 属性没有 tags 属性,您可能会收到正在静默记录的“未找到键”异常。相反,回顾 NSArrayController 的 filterPredicate 应用于数组的成员,您希望绑定设置如下:
Bind To: <array controller>
Controller Key: filterPredicate
Predicate Format: ANY self.tags contains[c] $value
self.tags
可以写成tags
,但我认为这更清楚地表明标签是应用谓词的对象的属性。
【讨论】:
我用作我的谓词格式:self.tags.name contains[c] $value 我得到一个错误:Can't do a substring operation with something that is not a string (lhs = ( "A B C", "X Y Z", ) rhs = A) 我认为这是因为左侧是一个容器。如果有多个标签对象,我如何让它成为一个字符串? 伙计们这是如何工作的!我有同样的问题,它不工作。巴里, 是否与包含父对象的对象相同,或者它是另一个派生对象??以上是关于在数组控制器上使用谓词过滤相关对象的主要内容,如果未能解决你的问题,请参考以下文章
使用 ng-repeat 和过滤器时数组中对象的 $index