20

Cardオブジェクト (NSObjects)の配列があり、それぞれtagsに NSStrings の NSArray と呼ばれるフィールドがあります。

keywords次に、ユーザーの検索用語を文字列 byと呼ばれる配列に分割し、componentsSeparatedByStringNSPredicate を使用して、どの要素に少なくとも 1 つのキーワードを含むタグがあるかに基づいてカードの配列をフィルター処理しkeywordsます。

複雑すぎないことを願っています!NSPredicateIN句を使用してみましたが、役に立ちませんでした。どうすればいいですか?

4

2 に答える 2

60

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:@"*"]]]
于 2012-07-02T13:25:30.987 に答える
9

これが正しくない場合でも、私を殺さないでください。ただし、このようなものは機能します。

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];
于 2012-07-02T11:51:48.023 に答える