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); } –