你好,并抱歉这个愚蠢的问题,但我想我可能会在这里错过一些简单的东西,而且我自己也无法弄明白。
我尝试使用以下代码搜索表格视图:
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
NSString *predicateFormat = @"(name contains[c] %@) OR (age contains[c] %@)";
NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateFormat, searchString];
self.fetchedResultsController = [self resetFetchedResultsController:predicate cached:NO];
NSError *error = nil;
[self.fetchedResultsController performFetch:&error];
// Return YES to cause the search result table view to be reloaded.
return YES;
}
我想要实现的是当用户搜索表格时,不仅可以搜索“名称”,还可以搜索“年龄”!
我上面的代码只搜索“名称”
我错过了一些简单的事情吗?
谢谢你的时间答案 0 :(得分:3)
而不是:
NSString *predicateFormat = @"(name contains[c] %@) OR (age contains[c] %@)";
NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateFormat, searchString];
您有三种选择:
NSString *predicateFormat = @"(name contains[c] %@) OR (age contains[c] %@)";
NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateFormat, searchString, searchString];
或者:
NSString *predicateFormat = @"(name contains[c] %1$@) OR (age contains[c] %1$@)";
NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateFormat, searchString];
或者:
NSString *predicateFormat = @"(name contains[c] $SEARCH) OR (age contains[c] $SEARCH)";
NSPredicate *template = [NSPredicate predicateWithFormat:predicateFormat];
NSPredicate *predicate = [template predicateWithSubstitutionVariables:[NSDictionary dictionaryWithObject:searchString forKey:@"SEARCH"]];
如果您正在构建具有未知数量的替换的大型谓词,则第3个选项很好。第二个可能是最简单的,不重复自己,但第一个是最容易理解的。