1

こんにちは、問題は次のようになります。

タイトルとキーワード エンティティとの関係を持つ CoreData エンティティがあります。

入力したキーワードがタイトルに含まれるすべてのエンティティを取得するのに役立つ述語が必要です。これを行う必要がある以下のコードがありますが、そうではありません。

NSArray *keywords = [searchString componentsSeparatedByString:@" "];
NSString *predicateString = @"";
for(NSInteger i = 0; i < [keywords count]; i++) {
    if(((NSString*)[keywords objectAtIndex:i]).length != 0) {
        if(i==0) {
            predicateString = [keywords objectAtIndex:i];
        }
        else {
            predicateString = [predicateString stringByAppendingFormat:@" and keywords.normalizedKeyword contains[cd] %@", [keywords objectAtIndex:i]]; 
        }

    }
}

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keywords.normalizedKeyword contains[cd] %@",predicateString];

たとえば、次のようなタイトルのエンティティがあります。

1) 「ぬりえテーマ」 2) 「子供向けテーマ」 3) 「子供向け車」

私のキーワードdbには次が含まれます:

子供の車のための素晴らしい塗り絵のテーマ

たとえば、次のように入力すると、述語を作成するにはどうすればよいですか。

のテーマ

結果は 2) と 3) になります

または私が入力した場合:

素晴らしいテーマ

結果は 1) と 2) になります。

これを達成するための適切な述語を取得するための助けは非常に高く評価されています。私がそこでやろうとしたことはうまくいかず、アイデアがありません。

ありがとう!

4

1 に答える 1

3

私は自分で答えを見つけました。このような問題を解決するには、NSCompoundPredicateを使用する必要があります。私の問題の解決策はこれでした:

    NSArray *keywords = [lowerBound componentsSeparatedByString:@" "];
NSMutableArray *predicates = nil;
for(NSInteger i = 0; i < [keywords count]; i++) {
    if(((NSString*)[keywords objectAtIndex:i]).length != 0) {
        NSPredicate *predicate = [NSPredicate predicateWithFormat:@"keywords.normalizedKeyword contains[cd] %@", [keywords objectAtIndex:i]];
        if(predicates == nil) {
            predicates = [[NSMutableArray alloc] initWithCapacity:0];
        }

        [predicates addObject:predicate];
    }
}

NSPredicate *compoundPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:predicates];
于 2010-08-20T15:53:17.477 に答える