我正在尝试配置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进行检查。
答案 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显示不同的名称。