Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Filter array in ios checking multiple properties

I have an array of custom objects. The custom object look like this

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

I have to filter the array checking 2 properties.That is if I search a then it should get list of users filtered from array contains a in user_Name or user_Id .How can i achieve this? For a single property i know[user_Name]

NSString *predicateString = @"user_Name MATCHES[c] %@";
NSString *matchString =  [NSString stringWithFormat: @".*%@.*",searchText];
NSPredicate *predicate =[NSPredicate predicateWithFormat:predicateString, matchString];
self.searchResults = [userArray filteredArrayUsingPredicate:predicate];
like image 288
Lithu T.V Avatar asked Mar 23 '13 04:03

Lithu T.V


3 Answers

You can join predicate conditions with OR, such as:

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

Alternately, you could filter the array by using indexesOfObjectsPassingTest: with an appropriate test block and then objectsAtIndexes: to get an array of the objects passing the test.

like image 71
Isaac Avatar answered Oct 03 '22 19:10

Isaac


NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(user_Name== %@) || (user_Id== %@), <name>,  <id>];
like image 35
Anoop Vaidya Avatar answered Oct 03 '22 19:10

Anoop Vaidya


Try to use this predicate string

NSString *predicateString = @"user_Name MATCHES[c] %@ OR user_Id MATCHES[c] %@";
like image 31
βhargavḯ Avatar answered Oct 03 '22 19:10

βhargavḯ