1

你好,很抱歉这个愚蠢的问题,但我想我可能在这里遗漏了一些简单的东西,我自己也想不通。

我正在尝试使用以下代码搜索表格视图:

- (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;
}

我想要实现的是,当用户搜索表格时,不仅可以通过“姓名”进行搜索,还可以通过“年龄”进行搜索!

我上面的代码只搜索“名称”

我错过了一些简单的东西吗?

感谢您的时间

4

1 回答 1

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 个选项很好。就不重复自己而言,第二个可能是最简单的,但第一个最容易理解。

于 2010-06-11T15:51:49.490 回答