- (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;
}
答案 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];