NSString * ForexateFormat, как искать два объекта - PullRequest
1 голос
/ 11 июня 2010

Привет и извините за глупый вопрос, но я думаю, что я мог бы упустить что-то простое здесь и не могу понять это сам.

я пытаюсь найти представление таблицы, используя следующий код:

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

я хочу достичь, когда пользователь ищет таблицу, чтобы иметь возможность искать не только по «имени»но с «age»!

мой код выше ищет только «name»

Я что-то упустил?

спасибо за ваше время

1 Ответ

3 голосов
/ 11 июня 2010

Вместо:

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"]];

Третий вариант хорош, если вы создаете большой предикат с неизвестным числом замен.Второе, вероятно, самое простое с точки зрения не повторения, но первое легче всего понять.

...