3

ファイルパスの配列があり、UIにNSPredicateEditorセットアップがあり、ユーザーはNSPredicateを組み合わせてファイルを見つけることができます彼は名前、タイプ、サイズ、日付でフィルタリングできるはずです。

私が今抱えているいくつかの問題があります:

  • エディターから取得できる述語オブジェクトは1つだけです。「predicateForRow:」を使用すると 、(null)が返されます
  • ユーザーがファイルを名前とサイズまたは日付でフィルタリングしたい場合、これらの情報が含まれていないため、配列でこの述語を使用することはできません。

NSStringオブジェクトに変換せずに、述語を異なる述語に分割してから、すべての@"OR"|を検索できますか。@ "AND"を使用してコンポーネントを配列に分離し、すべてのNSStringを新しい述語に変換しますか?


NSPredicateEditorの設定には、「左の式」のオプションがいくつかあります。 キーパス、定数値、文字列、整数、浮動小数点数、および日付です。「名前」、「タイプ」、「日付」、「サイズ」のドロップダウンメニューをユーザーに表示したい。しかし、生成された述語は自動的に次のようになります。

"name" MATCHES[c] "nameTest" OR "type" MATCHES[c] "jpg" OR size == 100

配列は文字列で埋められているため、「name」、「type」などを検索すると、これらの文字列は@"myString"*。name*mに応答しません。フィルターは、常に0個のオブジェクトを返します。メニューに名前、タイプ、サイズ、日付を表示する方法はありますが、手動で行わずに述語に「自己」を書き込む方法はありますか?

私はすでに公式のAppleチュートリアル、Stackoverflow、Google、さらにはYoutubeで手がかりを見つけて検索しました。この問題は、今ではほぼ1週間私を悩ませています。お時間をいただきありがとうございます!さらに詳しい情報が必要な場合はお知らせください。

4

1 に答える 1

3

あなたは正しい場所に来ました!:)

エディターから取得できる述語オブジェクトは 1 つだけです。

正しい。ではNSPredicateEditorなく、NSPredicatesEditorです。;)

「predicateForRow:」を使用すると、返されます(null)

その方法を使用するかどうかはわかりません。私の一般的な経験則は、それNSPredicateEditorが のサブクラスであることをほとんど無視することです。これはNSRuleEditor主に、それが高度に特殊化されたサブクラスであるため、多くのスーパークラス メソッドが述語エディター (基準、行選択に関するすべてのものと同様) であまり意味をなさないためです。など)。それらが何らかの形で関連している可能性はありますが、もしそうなら、私はまだその方法を理解していません.

エディターから述語を取得するには、次のようにします。

NSPredicate *predicate = [myPredicateEditor objectValue];

ユーザーが名前とサイズまたは日付でファイルをフィルタリングしたい場合

つまり(name = [something]) AND (size = [something] OR date = [something])

その場合NSPredicateEditor、ネスティング モードを「複合」に設定していれば、それを行うことができます。

これらの情報が配列に含まれていないため、配列でこの述語を使用することはできません

どのような情報が必要ですか?

述語を NSString オブジェクトに変換せずに別の述語に分割し、すべての @" OR " | を検索できますか? @" AND " コンポーネントを配列に分離してから、すべての NSString を新しい述語に変換しますか?

はい、しかしそれは悪い考えです。NSPredicate必要な情報がすべて含まれており、別の形式に変換して文字列操作を行う必要がなく、複雑になる可能性があるため、これは悪いことです (たとえば、誰かが「名前」の値を入力できる場合、 「OR」と入力しますか?)。

あなたが何をしようとしているのかを理解するのに苦労しています。NSStringユーザーが作成した述語に基づいてフィルター処理するオブジェクトの配列があるようですね。もしそうなら、これらのnamedate、およびsizeキーパスは何を意味しますか? あなたは何をしようとしているのですか?

于 2012-07-07T16:49:07.750 に答える