2

NSPredicateEditorの述語を編集するように (Interface Builder で) を構成しようとしていますNSMetadataQuery

最初のステップとして、NSPredicateEditorRowTemplate単一の keyPath ( kMDItemTextContent) を開始しようとして、左側の式のキー パスを受け入れるように を構成しようとしています。

すべてのピースを IB に入れる方法がわかりません。行テンプレートを選択し、IB Attributes Inspector で「Left Exprs」を「Key Paths」に設定しました。しかし、Apple の PhotoSearch の例をモデルとして使用すると、ユーザーが読み取り可能な属性名 (「コンテンツ」など) をここに入力する必要があるようです。それを " " にバインドする方法がわかりませんkMDItemTextContent

PhotoSearch(*) で (正しく構成された) NIB を分析したところ、その中に/NSKeyPathExpressionに付加されたメタデータ属性の指定があります。NSPopUpButtonNSPopUpButtonCell

を見つけるために IB でナビゲートする場所がわかりNSPopUpButtonません。また、それをNSExpression.

どんな助けでも感謝します。

(*) ご参考までに、NIB を XIB に変換して、NIB が正しくビルドされることを確認し、BBEdit で調べてみました。

4

1 に答える 1

1

NSPredicateEditorInterface 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ローカライズ オプションを使用して別の名前を表示できます。

于 2011-01-17T01:08:28.980 に答える