2013-03-23 56 views
7

我有一個自定義對象的數組。自定義對象這個樣子的在ios中過濾數組檢查多個屬性

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

我有數組檢查2 properties.That過濾器是如果我搜索a那麼就應該從陣列過濾的用戶列表中包含auser_Nameuser_Id我。怎麼能實現這個?對於單個屬性我知道[用戶名]

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

怎麼樣利用兩個人的和合並的結果? – 2013-03-23 04:03:26

+0

true.but如何合併沒有重複的結果? – 2013-03-23 04:04:06

+0

作爲user_Id將是通用的,循環其中之一,如果user_id不在數組中添加它。 – 2013-03-23 04:05:11

回答

3

You can join predicate conditions with OR,如:

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

另外,還可以通過使用indexesOfObjectsPassingTest:與適當的試塊陣列過濾和然後objectsAtIndexes:獲取數組通過測試的對象。

+0

出於某種原因,這不適用於我,如此使用或CompoundQueries,它的工作。 – user431791 2014-11-20 17:21:03

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

嘗試使用這個謂詞字符串

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