在数组控制器上使用谓词过滤相关对象

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

谓词下推

谓词,从 NSDate 中按年份过滤,产生一个 nil 日期和一个讽刺的 Xcode 错误

如何在 Java 中动态构造谓词

使用谓词的字典过滤器数组 - swift3