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 を含む配列が生成されます。
しかし、私はこの結果を得ません。