Card
オブジェクト(NSObjects)の配列があり、それぞれにtags
というフィールドがあります。これはNSStringのNSArrayです。
次に、ユーザーの検索用語をkeywords
という文字列の配列にcomponentsSeparatedByString
で分割し、NSPredicateを使用して、少なくとも1つを含むタグを持つ要素に基づいてカードの配列をフィルタリングします。 keywords
のキーワード。
それがあまり複雑ではないことを願っています! NSPredicate IN
句を使用してみましたが役に立ちませんでした。どうすればよいですか?
array
にカードオブジェクトが含まれていることを考慮してください。
NSArray *keyWordsList = [keywords componentSeparatedByString:@","];
[array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ANY %K IN %@",@"tags",keyWordsList]]
編集:
部分的に検索するには、LIKE演算子を使用できます。
[array filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"ANY %K LIKE[cd] %@",@"tags",[partialkeyWord stringByAppendingString:@"*"]]]
これが正確に正しくない場合でも私を殺さないでください、しかしこのようなものはうまくいくでしょう。
NSArray* arrayOfCards = [NSArray array];
NSArray* keywords = [NSArray array];
NSPredicate* containsAKeyword = [NSPredicate predicateWithBlock: ^BOOL(id evaluatedObject, NSDictionary *bindings) {
Card* card = (Card*)evaluatedObject;
NSArray* tagArray = card.tags;
for(NSString* tag in tagArray) {
if( [keywords containsObject: tag] )
return YES;
}
return NO;
}];
NSArray* result = [arrayOfCards filteredArrayUsingPredicate: containsAKeyword];