0

私は、いくつかのデータメンバーを持つ辞書の配列を含む検索ディスプレイコントローラーで動作するplistを持っています。

<root> (array)
  <"Item 0"> (dictionary)
    <"Name"></"Name" (String)
    <"Work"></"Work"> (String)
    <"Age"></"Work"> (Number)
  </"Item 0">
  <"Item 1">
    ....
  </"Item 1">
</root>

NSPredicate を使用して、検索条件に一致するすべての名前をフィルタリングしたいと考えています。たとえば、「an」ですべての名前を検索すると、「Sandy」と「Alexander」が返されます。

これまでのところ、次のようなことを試しました:

NSPredicate *p = [NSPredicate predicateWithFormat:@"Name == %@",
                                filterText];
Results = [data filteredArrayUsingPredicate:p];

何か案は?ありがとう。

4

2 に答える 2

0

これは、任意の検索の非常に一般的なタイプを示すことができますNSArray。現在、アイテムに合わせて調整されてNSDictionaryいますが、ここでさらに複雑な条件を作成してフィルターすることができます。

NSArray *originalArray = ...;

NSString *searchText = ...; // this is a parameter only, it can be set freely

NSArray *_filteredArray = [originalArray filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
            NSDictionary *_dataRow = (NSDictionary *)evaluatedObject;
            return ([[[_dataRow valueForKey:@"Name"] lowercaseString] rangeOfString:[searchText lowercaseString]].location != NSNotFound);
        }]];

NSLog (@"%@", _filteredArray);
于 2013-01-11T15:57:01.110 に答える
0

CONTAINSで使用NSPredicate

以下のコードはcase sensitive search

NSPredicate *p = [NSPredicate predicateWithFormat:@"Name CONTAINS %@",
                            filterText];
Results = [yourPlistDataArray filteredArrayUsingPredicate:p];

以下のコードはcase insensitive search

NSPredicate *p = [NSPredicate predicateWithFormat:@"ANY Name CONTAINS %@",
                            filterText];
Results = [yourPlistDataArray filteredArrayUsingPredicate:p];

編集:ここで詳細を参照してください

于 2013-01-11T03:44:00.410 に答える