iOS中的Plist nspreditate
我有一个plist与一个搜索显示控制器一起工作,该控制器包含一个字典数组,其中包含一些数据成员,如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"> &
<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。”