在ios中过滤数组,检查多个属性

时间:2013-03-23 04:01:45

标签: iphone ios search uisearchbar nspredicate

我有一系列自定义对象。自定义对象看起来像这样

@interface User : NSObject
@property(nonatomic, strong)NSString *user_Id;
@property(nonatomic, strong)NSString *user_Name;
@property(nonatomic, strong)NSString *user_UserName;
@end

我必须过滤数组检查2个属性。那就是我搜索a然后它应该从auser_Name中获取从数组中包含user_Id的用户列表我怎么能实现这个目标?对于单个属性,我知道[user_Name]

NSString *predicateString = @"user_Name MATCHES[c] %@";
NSString *matchString =  [NSString stringWithFormat: @".*%@.*",searchText];
NSPredicate *predicate =[NSPredicate predicateWithFormat:predicateString, matchString];
self.searchResults = [userArray filteredArrayUsingPredicate:predicate];

3 个答案:

答案 0 :(得分:3)

You can join predicate conditions with OR,例如:

NSString *predicateString = @"(user_Name MATCHES[c] %@) OR (user_Id MATCHES[c] %@)";

或者,您可以使用indexesOfObjectsPassingTest:使用适当的测试块来过滤数组,然后使用objectsAtIndexes:来获取通过测试的对象数组。

答案 1 :(得分:1)

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(user_Name== %@) || (user_Id== %@), <name>,  <id>];

答案 2 :(得分:1)

尝试使用此谓词字符串

NSString *predicateString = @"user_Name MATCHES[c] %@ OR user_Id MATCHES[c] %@";