4

我在IOS中很新,我正在使用UISearchDisplayController進行搜索。如何搜索字典數組並顯示在UITableview中?

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString 
{ 
    [self filterContentForSearchText:searchString 
           scope:[[self.searchDisplayController.searchBar scopeButtonTitles] 
             objectAtIndex:[self.searchDisplayController.searchBar 
                selectedScopeButtonIndex]]]; 

    return YES; 
} 

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope 
{ 
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY SELF == %@", searchText]; 
    NSArray *filtered = [self.arrProductList filteredArrayUsingPredicate:predicate]; 
    NSLog(@"%@", filtered); 
} 

,這裏是我的self.arrProductList是數組的數組即

 
    ({ 
     ID = 1; 
     description = "Coalesce Functioning on impatience T-Shirt"; 
     pname = "Coalesce Functioning T-Shirt"; 
     price = "299.00"; 
     qty = 99; 
     }, 
    { 
     ID = 2; 
     description = "Eater Krylon Bombear Destroyed T-Shirt"; 
     pname = "Girl's T-Shirt"; 
     price = "499.00"; 
     qty = 99; 
    }, 
    { 
     ID = 3; 
     description = "The Get-up Kids Band Camp Pullover Hoodie"; 
     pname = "Band Camp T-Shirt"; 
     price = "399.00"; 
     qty = 99; 
    }) 

我的問題是如何使用鍵 「PNAME」搜索?我的應用程序墜毀在

filteredArrayUsingPredicate:

+0

arrProductList是字典的陣列;-) – vadian

+0

這是字典 –

+0

的陣列哎呀對不起。我會更新我的答案:)。 –

回答

0

我的朋友解決了這個問題。這裏,是代碼:

- (void) searchBarDidBeginEditing:(UISearchBar*) lclSearchBar 
{ 
    self.searchBar.showsCancelButton = YES; 
} 
#pragma mark - UISearchDisplayController delegate methods 
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString 
{ 

    [self filterContentForSearchText:searchString 
           scope:[[self.searchDisplayController.searchBar scopeButtonTitles] 
             objectAtIndex:[self.searchDisplayController.searchBar 
                selectedScopeButtonIndex]]]; 

    return YES; 
} 

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope 
{ 
    if (searchResults.count != 0) { 
     [searchResults removeAllObjects]; 
    } 
    for (int i=0; i< [self.arrProductList count]; i++) 
    { 
     NSString *string = [[self.arrProductList objectAtIndex:i] valueForKey:@"pname"]; 
     NSRange rangeValue = [string rangeOfString:searchText options:NSCaseInsensitiveSearch]; 
     if (rangeValue.length > 0) 
     { 
      NSLog(@"string contains bla!"); 

      [searchResults addObject:[self.arrProductList objectAtIndex:i]]; 
     } 
     else 
     { 
      NSLog(@"string does not contain bla"); 
     } 
    } 
    NSLog(@"fiilterArray : %@",searchResults); 
} 
2

您需要修改謂詞中添加鍵值尋找:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"pname == %@", searchText]; 

此外==實際上將尋找精確匹配,即如果您輸入Band Camp T-Shirt作爲搜索,則您將得到結果,如果您只需輸入BandCampShirt,則將無法獲得任何結果。因此,爲了實現基於字符的搜索,您需要修改謂詞以包含contain關鍵字。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"pname contains[cd] %@", searchText]; 

[cd]將匹配不區分大小寫。

+0

謝謝,但我的應用程序崩潰在filteredArrayUsingPredicate: –

+0

除非你在這裏粘貼崩潰,否則很難知道你崩潰的原因。 –

+0

我改變代碼 - (無效)filterContentForSearchText:(的NSString *)SEARCHTEXT範圍:(的NSString *)範圍 { 對(INT I = 0; I <[self.arrProductList計數];我++){ 的NSString *串= [[self.arrProductList objectAtIndex:i] valueForKey:@「pname」]; ([string containsString:searchText]) { NSLog(@「string contains bla!」); [searchResults addObject:[self.arrProductList objectAtIndex:i]]; } else { NSLog(@「string does not contain bla」); } } NSLog(@「fiilterArray:%@」,searchResults); } –