2011-01-16 4 views
2

Я пытаюсь настроить NSPredicateEditor (в Interface Builder) для редактирования предиката для NSMetadataQuery.Настройка NSPredicateEditor (RowTemplate) для метаданных Spotlight queriesI '

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

Я не могу понять, как получить все части в IB. Я выбрал шаблон строки и установил «Left Exprs» в «Key Paths» в Inspector IB Attributes. Но, используя пример Apple PhotoSearch в качестве модели, кажется, что я должен ввести здесь имя читаемого пользователя (например, «Содержание»); Я не могу понять, как привязать его к «kMDItemTextContent».

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

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

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

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

ответ

1

Я обнаружил, что работа с NSPredicateEditor и друзьями в Interface Builder - чрезвычайно утомительная задача. По этой причине я делаю всю конфигурацию шаблона строки в коде.

Для вашей ситуации, это не звучит, как вам нужно пользовательские строки шаблона подкласс, так что вы могли бы, вероятно, просто сделать:

#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, чтобы отобразить другое имя.

+0

Быстрый ответ, спасибо! У меня это работает; единственный сбой состоял в том, что перед тем, как добавить их во входной массив, необходимо было обернуть пути ключей в [NSExpression expressionForKeyPath: keyPath]. –

+0

@ Doug о, хорошо, поймать. Это то, что я получаю для ввода в браузере. –