2012-05-22 172 views
0

我必須通過在運行中引入搜索關鍵字和過濾來過濾對象數組。我該如何做到這一點?NSPredicate通過對象進行搜索

//this is my Article class 
@property int intID; 
@property (nonatomic, strong) NSString *strName; 
@property (nonatomic, strong) NSString *strTitle; 
@property (nonatomic, strong) NSString *strDescription; 
@property (nonatomic, strong) NSString *lang; 
@property (nonatomic, strong) NSString *dateDate; 
@property (nonatomic, strong) NSData *dataPicture; 
@property (nonatomic, strong) NSString *link; 
@property (nonatomic, strong) NSString *gallery; 
@property int flag; 
@property int subcat; 
@property int cat; 
@property int idpic; 

我必須選擇與文章包含文字與引進串

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText 
{   
   NSPredicate *predicate = [NSPredicate predicateWithFormat:@"strName MATCHES '.*(%@).*'", searchText]; 
    
   NSLog(@"%@", [NSString stringWithFormat:@"strName MATCHES '.*%@.*' OR strTitle MATCHES '.*%@.*'", searchText, searchText]); 
    
   articleSearchArray=[NSMutableArray array]; 
   articleSearchArray = [NSMutableArray arrayWithArray:[allArticleArr filteredArrayUsingPredicate:predicate]]; 

   for(Article *article in articleSearchArray) 
   { 
        
       NSLog(@"Article id is %i", article.intID); 
   } 
   [mytableView reloadData]; 
    
} 

回答

3
[NSPredicate predicateWithFormat:@"strName contains[c] '%@'", searchText]; 

這一個數組中,將獲取所有的對象,他們的strName屬性包含searchText字符串使用病例不敏感的比較(這是用[c]表示),我認爲這是你正在尋找的。 之後,您只需將NSArray作爲您的數據源設置爲已過濾的數據源並執行reloadData即可。