Настройка 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 варианты локализации для отображения другого имени.

Другие вопросы по тегам