2014-07-18 106 views
1

我有以下uisearchbar委託方法。我希望此方法可以搜索我的對象arrayofterms屬性,以查看是否有任何元素與searchText參數匹配。如何過濾基於nsarray的謂詞

這項工作? :

-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope { 


    [self.filteredArray removeAllObjects]; 
    // something like this is what the objects array attribute will look like: NSArray *arrayofterms = [NSArray arrayWithObjects:@"Miguel", @"Ben", @"Adam", @"Melissa", nil]; 

    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.arrayofterms contains[c] %@",searchText]; 
    self.filteredArray = [NSMutableArray arrayWithArray:[self.planDataArray filteredArrayUsingPredicate:predicate]]; 

    } 
+0

*不*工作?你告訴我們。 – Undo

+0

不,它不會因爲它將文本字符串與數組進行比較。我希望它與數組的內容進行比較。 – Atma

+0

使用謂詞,實現以下功能:檢查self.planaDataArray的每個元素的'arrayofterms'屬性是否包含'searchText'。不幸的是,我沒有得到你想要達到的目標,請你澄清一下? –

回答

0

數組是否包含字符串?然後......

NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(NSString *string, NSDictionary *bind) { 
    return [string isEqualToString:searchText]; 
}]; 

self.filteredArray = [[self.planDataArray filteredArrayUsingPredicate:predicate] mutableCopy]; 

如果planDataArray包含一些其他類型的對象,也許是自定義對象,然後...

NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(MyCustomObject *object, NSDictionary *bind) { 
    NSString *string = object.someStringProperty; 
    return [string isEqualToString:searchText]; 
}];