NSPredicate (filterContentForSearchText) if/else: searchText hasPrefix:@"#"
NSPredicate (filterContentForSearchText) if/else: searchText hasPrefix:@"#"
- (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;
}
您可能会发现这可以解决问题:
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"(def contains[c] '%@')", searchText];
(注意在 %@ 两边添加了引号)
没有去掉愚蠢的前缀。
这是我的解决方案
NSString *prefixToRemove =@"#";
NSString *newString = [searchText copy];
if ([searchText hasPrefix:prefixToRemove])
newString = [searchText substringFromIndex:[prefixToRemove length]];
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"(def contains[c] %@)", newString];
- (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;
}
您可能会发现这可以解决问题:
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"(def contains[c] '%@')", searchText];
(注意在 %@ 两边添加了引号)
没有去掉愚蠢的前缀。
这是我的解决方案
NSString *prefixToRemove =@"#";
NSString *newString = [searchText copy];
if ([searchText hasPrefix:prefixToRemove])
newString = [searchText substringFromIndex:[prefixToRemove length]];
NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"(def contains[c] %@)", newString];