我有一个使用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中没有任何事情发生。这有什么问题?
答案 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
,但我认为这更清楚了标签是应用谓词的对象的属性。