Настройка NSPredicateEditor (RowTemplate) для запросов метаданных Spotlight - PullRequest
2 голосов
/ 17 января 2011

Я пытаюсь настроить NSPredicateEditor (в Интерфейсном Разработчике) для редактирования предиката для NSMetadataQuery.

В качестве первого шага я пытаюсь настроить NSPredicateEditorRowTemplate так, чтобы он принимал ключевые пути для левого выражения, пробуя один ключ keyPath (kMDItemTextContent), чтобы начать работу.

Я не могу понять, как получить все части в IB.Я выбрал шаблон строки и установил «Левые выражения» на «Ключевые пути» в Инспекторе атрибутов IB.Но, используя пример PhotoSearch от Apple в качестве модели, мне кажется, что здесь я должен ввести удобочитаемое имя атрибута (скажем, «Content»);Я не могу понять, как связать его с «kMDItemTextContent».

Я проанализировал (правильно настроенный) NIB в PhotoSearch (*), и внутри него есть NSKeyPathExpression, указывающийатрибут метаданных, прикрепленный к NSPopUpButton / NSPopUpButtonCell.

. Я не могу понять, куда перейти в IB, чтобы найти NSPopUpButton, и я не уверен, что мне делать, чтобыпривязать его к NSExpression.

Любая помощь приветствуется.

(*) Если вам интересно, я попал внутрь NIB, преобразовав его в XIB, подтвердивчто он все еще строит правильно, затем проверяет его с помощью BBEdit.

1 Ответ

1 голос
/ 17 января 2011

Я обнаружил, что работа с 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 опции локализации для отображения другого имени.

...