NSPredicate(filterContentForSearchText)if / else:searchText hasPrefix:@"#"

时间:2016-03-16 07:33:49

标签: ios objective-c search full-text-search nspredicate

- (void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope {
  if ([searchText hasPrefix:@"#"]) {
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"(def contains[c] %@)", searchText];
    searchResults = [chengduhua filteredArrayUsingPredicate:resultPredicate];
  } else {
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"(head beginswith[c] %@) OR (pro beginswith[c] %@) OR (searchableStringValue beginswith[c] %@)", searchText, searchText, searchText];
    searchResults = [chengduhua filteredArrayUsingPredicate:resultPredicate];
  }
}

我的else工作正常,但任何#前缀搜索都显示为空。

任何提示?

searchText是正确的我需要加前缀吗?!

这是我的搜索显示控制器:

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

}

2 个答案:

答案 0 :(得分:0)

你可能会发现这个解决了它:

NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"(def contains[c] '%@')", searchText];

(注意在%@周围添加引号)

答案 1 :(得分:0)

没有删除愚蠢的前缀。

这是我的解决方案

    NSString *prefixToRemove =@"#";
    NSString *newString = [searchText copy];
    if ([searchText hasPrefix:prefixToRemove])
        newString = [searchText substringFromIndex:[prefixToRemove length]];
    NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"(def contains[c] %@)", newString];