2013-03-23 8 views
7

Mam tablicę niestandardowych obiektów. Zwyczaj obiekt wyglądać następującoFiltr tablica w ios sprawdzanie wielu właściwości

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

mam do filtrowania tablicę sprawdzanie 2 properties.That jest, jeśli mogę szukać a to powinno się lista użytkowników odfiltrowane z tablicy zawiera a w user_Name lub user_Id .Jak mogę osiągnąć to? Dla pojedynczej własności wiem [nazwa_użytkownika]

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

co z użyciem dwóch z nich i scalanie wyniki? –

+0

true.but jak połączyć wyniki bez duplikatów? –

+0

jako id_użytkownika będą wspólne, przechodzą jeden z nich, a jeśli id_użytkownika nie znajduje się w tablicy, dodaj go. –

Odpowiedz

3

You can join predicate conditions with OR, takich jak:

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

Alternatywnie, można filtrować tablicy za pomocą indexesOfObjectsPassingTest: z odpowiednim bloku testowego, a następnie objectsAtIndexes: aby uzyskać tablicę obiektów przechodzących test.

+0

Z jakiegoś powodu nie działa to dla mnie, więc użyłem OrCompoundQueries i zadziałało. – user431791

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

spróbuje użyć tego ciągu źródłowe

NSString *predicateString = @"user_Name MATCHES[c] %@ OR user_Id MATCHES[c] %@"; 
Powiązane problemy