2013-03-23 13 views
7

Bir dizi özel nesnem var. Ben arama yaparsanız ben 2 properties.That kontrol dizi filtre zorunda buBirden çok özelliği denetlerken ios içinde filtre dizisi

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

gibi özel nesne bakmak a sonra diziden süzülmüş kullanıcı listesini dan bahsederler ı elde edebilirsiniz auser_Name veya user_Id içeren almalısınız bu? Tek bir özellik için biliyorum [USER_NAME] gibi

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

neyi kullanılır? –

+0

true.but Sonuçları çift kopya olmadan nasıl birleştirirsiniz? User_Id olarak –

+0

ortak olacaktır, bunlardan biriyle döngü yapın ve dizideki user_id öğesi eklemediyse. –

cevap

3

You can join predicate conditions with OR:

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

Alternatif olarak, bir dizi elde etmek için daha sonra objectsAtIndexes: uygun bir test bloğu ile indexesOfObjectsPassingTest: kullanılarak dizi filtre ve olabilir testi geçen nesnelerin.

+0

Bazı nedenlerle bu benim için çalışmıyor, bu yüzden orCompoundQueries kullanıldı ve işe yaradı. – user431791

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

deneyin ikisi kullanılarak ve sonuçları birleştirme hakkında bu yüklem dize

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