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 回答