2013-03-23 36 views
7

Tôi có một mảng các đối tượng tùy chỉnh. Các đối tượng tùy chỉnh cái nhìn như thế nàyMảng lọc trong ios kiểm tra nhiều thuộc tính

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

tôi phải lọc các mảng kiểm tra 2 properties.That là nếu tôi tìm kiếm a sau đó nó sẽ nhận được danh sách người dùng lọc ra khỏi mảng chứa a trong user_Name hoặc user_Id .Làm thế nào tôi có thể đạt được điều này? Đối với một tài sản duy nhất tôi biết [user_name]

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

gì về việc sử dụng hai trong số họ và sáp nhập kết quả? –

+0

true.but làm cách nào để hợp nhất kết quả mà không trùng lặp? –

+0

vì user_Id sẽ phổ biến, lặp qua một trong số chúng và nếu user_id không nằm trong mảng, hãy thêm nó vào. –

Trả lời

3

You can join predicate conditions with OR, chẳng hạn như:

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

Cách khác, bạn có thể lọc mảng bằng cách sử dụng indexesOfObjectsPassingTest: với một khối thử nghiệm thích hợp và sau đó objectsAtIndexes: để có được một mảng của các đối tượng vượt qua bài kiểm tra.

+0

Vì một số lý do, điều này không có tác dụng đối với tôi, nên các orCompoundQueries đã sử dụng và nó hoạt động. – user431791

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

Cố gắng sử dụng chuỗi vị ngữ này

NSString *predicateString = @"user_Name MATCHES[c] %@ OR user_Id MATCHES[c] %@"; 
Các vấn đề liên quan