如何为此类请求创建正确的NSPredicate?

时间:2010-08-20 15:21:27

标签: iphone core-data nspredicate nsfetchrequest

嗨问题是这样的:

我在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)

非常感谢任何有助于获得正确谓词的帮助。我试图在那里做的它不起作用,我没有想法。

谢谢!

1 个答案:

答案 0 :(得分: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];