2

UITextField を検索フィールドとして使用しています。ユーザーは複数の検索値をコンマで区切って入力できます。入力することで、検索コンポーネントの 1 つに一致する NSArray 内のすべてのカスタム オブジェクトを見つけたいと考えています。

カスタム オブジェクトにプロパティがありません (検索に使用できます)。私が呼び出さなければならない値を受け取る[myObject fieldForKey:@"username"].value;。このため、私は使用する必要があります[NSPredicate predicateWithBlock](または、別の方法は私には不可能でした)。

私の検索方法 (TextField で文字が変更されるたびに呼び出されます):

-(void)searchEntriesWithString:(NSString*)searchString {
    NSArray *dataSource = [NSArray arrayWithArray:_allObjects];

    searchString = [searchString stringByReplacingOccurrencesOfString:@" " withString:@""];

    NSArray *components = [searchString componentsSeparatedByString:@","];
    NSMutableArray *predicates = [NSMutableArray array];
    for (NSString *value in components) {
        NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {

        return ( [[(MyObject*)evaluatedObject fieldForKey:@"username"].wert hasPrefix:value ]);
        }];

        [predicates addObject:predicate];
    }

        NSPredicate *resultPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:predicates];

    NSMutableArray searchResultArray = [NSMutableArray arrayWithArray:[dataSource filteredArrayUsingPredicate:resultPredicate]];
}

次の dataSource を想定しています。

  • ユーザー名「userA」の Object1
  • ユーザー名「userB」の Object2
  • ユーザー名「userC」の Object3

'[self searchEntriesWithString:@"userA,userB"]' を使用してメソッドを呼び出すと、Object1 と Object2 を含む配列が生成されます。

しかし、私はこの結果を得ません。

4

1 に答える 1

3

すべての検索コンポーネントではなく、検索コンポーネントの1 つが必要だったので、以下を使用する必要があったと思います。

NSPredicate *resultPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:predicates];

あなたが持っていたようにandPredicateWithSubpredicates、用語を使用すると、「userA」「userB」を渡す必要がありました。

[3 か月前に質問され、回避策を見つけて先に進みましたが、提案を残しておきたいと思いました]

于 2013-05-24T14:30:59.463 に答える