为Spotlight元数据查询配置NSPredicateEditor(RowTemplate)

时间:2011-01-16 21:42:25

标签: cocoa spotlight nspredicateeditor

我正在尝试配置NSPredicateEditor(在Interface Builder中)来编辑NSMetadataQuery的谓词。

作为第一步,我正在尝试配置NSPredicateEditorRowTemplate以接受左侧表达式的关键路径,尝试使用单个keyPath(kMDItemTextContent)来启动。 / p>

我无法弄清楚如何将所有部分都归入IB。我选择了行模板,并在IB Attributes Inspector中将“Left Exprs”设置为“Key Paths”。但是,使用Apple的PhotoSearch示例作为模型,我似乎应该在这里输入用户可读的属性名称(例如“内容”);我无法弄清楚如何将其绑定到“kMDItemTextContent”。

我在PhotoSearch(*)中剖析了(正确配置的)NIB,其中有NSKeyPathExpression指定附加到NSPopUpButton / NSPopUpButtonCell的元数据属性。

我无法弄清楚在IB中导航的位置以找到NSPopUpButton,我不知道我要做些什么来将其绑定到NSExpression

任何帮助表示感谢。

(*)如果您想知道,我通过将其转换为XIB进入NIB,确认它仍然正确构建,然后使用BBEdit进行检查。

1 个答案:

答案 0 :(得分:1)

我发现在Interface Builder中与NSPredicateEditor和朋友一起工作是一项非常繁琐的工作。出于这个原因,我在代码中完成了所有的行模板配置。

对于您的情况,听起来您不需要自定义行模板子类,所以您可能只是这样做:

#define NSPERT NSPredicateEditorRowTemplate
NSPERT * template = [[NSPERT alloc] initWithLeftExpressions:[NSArray arrayWithObject:[NSExpression expressionForKeyPath:kMDItemTextContent]] 
                               rightExpressionAttributeType:NSStringAttributeType
                                                   modifier:NSDirectPredicateModifier
                                                  operators:[NSArray arrayWithObject:
                                                             [NSNumber numberWithUnsignedInteger:NSContainsPredicateOperatorType]]
                                                    options:(NSCaseInsensitivePredicateOption|NSDiacriticInsensitivePredicateOption)];

获得模板后,只需将其添加到predicateEditor:

NSMutableArray * templates = [[myPredicateEditor rowTemplates] mutableCopy];
[templates addObject:template];
[template release];
[myPredicateEditor setRowTemplates:templates];
[templates release];

至于翻译“kMDItemTextContent”,如果它没有自动发生(我认为可能会发生),您可以使用NSPredicateEditor localization options显示不同的名称。