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

次の 3 つのオプションがあります。

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 番目のオプションが便利です。2 番目は、同じことを繰り返さないという点でおそらく最も単純ですが、1 番目が最も理解しやすいです。

于 2010-06-11T15:51:49.490 に答える