iOS中的Plist nspreditate

iOS中的Plist nspreditate,ios,objective-c,xcode,cocoa-touch,nspredicate,Ios,Objective C,Xcode,Cocoa Touch,Nspredicate,我有一个plist与一个搜索显示控制器一起工作,该控制器包含一个字典数组,其中包含一些数据成员,如 <root> (array) <"Item 0"> (dictionary) <"Name"></"Name" (String) <"Work"></"Work"> (String) <"Age"></"Work"> (Number) </"Item 0"> &

我有一个plist与一个搜索显示控制器一起工作,该控制器包含一个字典数组,其中包含一些数据成员,如

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

有什么想法吗?谢谢。

使用
包含在
NSPredicate

下面的代码提供区分大小写的搜索

NSPredicate *p = [NSPredicate predicateWithFormat:@"Name CONTAINS %@",
                            filterText];
Results = [yourPlistDataArray filteredArrayUsingPredicate:p];
NSPredicate *p = [NSPredicate predicateWithFormat:@"ANY Name CONTAINS %@",
                            filterText];
Results = [yourPlistDataArray filteredArrayUsingPredicate:p];
下面的代码提供了不区分大小写的搜索

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

编辑:参考更多信息

这可以显示任何
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);

谓词的格式似乎不正确,因为它会导致错误:“NSInvalidArgumentException”,原因:“ALL或ANY运算符的左侧必须是NSArray或NSSet。”