Настройка NSPredicateEditor(RowTemplate) для запросов метаданных Spotlight
Я пытаюсь настроить NSPredicateEditor
(в Интерфейсном Разработчике), чтобы отредактировать предикат для NSMetadataQuery
,
В качестве первого шага я пытаюсь настроить NSPredicateEditorRowTemplate
принять ключевые пути для левого выражения, пробуя один keyPath (kMDItemTextContent
) для начала.
Я не могу понять, как получить все части в IB. Я выбрал шаблон строки и установил "Левые выражения" на "Ключевые пути" в Инспекторе атрибутов IB. Но, используя пример PhotoSearch от Apple в качестве модели, мне кажется, что здесь я должен ввести удобочитаемое имя атрибута (скажем, "Content"); Я не могу понять, как связать это с "kMDItemTextContent
".
Я проанализировал (правильно настроенный) NIB в PhotoSearch(*), и внутри него есть NSKeyPathExpression
указание атрибута метаданных, прикрепленного к NSPopUpButton
/NSPopUpButtonCell
,
Я не могу понять, где перемещаться в IB, чтобы найти NSPopUpButton
и я не уверен, что бы я сделал, чтобы привязать его к NSExpression
,
Любая помощь приветствуется.
(*) Если вам интересно, я попал внутрь NIB, конвертировав его в XIB, подтвердив, что он все еще строится правильно, а затем изучив его с помощью BBEdit.
1 ответ
Я обнаружил, что работа с 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)];
Получив шаблон, просто добавьте его в предикат предиката:
NSMutableArray * templates = [[myPredicateEditor rowTemplates] mutableCopy];
[templates addObject:template];
[template release];
[myPredicateEditor setRowTemplates:templates];
[templates release];
Что касается перевода "kMDItemTextContent
", если это не произойдет автоматически (и я думаю, что может), вы можете использовать NSPredicateEditor
варианты локализации для отображения другого имени.