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

时间:2009-05-12 18:58:58

标签: objective-c cocoa core-data cocoa-bindings

我有一个使用Core Data和绑定的应用程序。我希望有一个NSSearchField可以搜索绑定到NSTableView的NSArrayController。阵列控制器包含具有“名称”字段的Core Data对象。我已经像这样设置了NSSearchField:

Bind To: the array controller
Controller Key: filterPredicate
Predicate Format: name contains[c] $value

这很有效。我想扩展它,以便它可以搜索与数组控制器中的对象相关的对象的字段。数组控制器中的每个对象与另一种称为“tag”的对象具有to-many关系,该对象具有名为“name”的字段。我尝试了以下方法:

Bind To: the array controller
Controller Key: filterPredicate
Model Key Path: tags
Predicate Format: name contains[c] $value

然而,这不起作用。当文本输入NSSearchField时,NSTableView中没有任何事情发生。这有什么问题?

1 个答案:

答案 0 :(得分:10)

绑定到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,但我认为这更清楚了标签是应用谓词的对象的属性。