NSCompoundPredicate не соответствует - PullRequest
1 голос
/ 09 августа 2010

Я создаю NSP-предикат, используя приведенный ниже код для приложения для iPhone.В журнале показано, что предопределение будет следующим: местоположение СОДЕРЖИТ «голову» И форму СОДЕРЖИТ «овал» И текстуру СОДЕРЖИТ «неровный» И цвет СОДЕРЖИТ «красный»

Я не получаю результатов.Если я ограничу предикат одним элементом, который будет работать, произойдет сбой более 1.

Может кто-нибудь сказать мне, почему?

Большое спасибо

NSMutableArray *subPredicates = [[NSMutableArray alloc] init];
for (Ditem in self.tableDataSource) {
    NSString *Title = [Ditem valueForKey:@"Title"];
    NSString *Value = [Ditem valueForKey:@"Value"];
    if([[Value lowercaseString] isEqualToString: @"all"]){
        Value = @"";
    }
    else{
        NSPredicate *p = [NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForKeyPath:[Title lowercaseString]] rightExpression:[NSExpression expressionForConstantValue:[Value lowercaseString]] modifier:NSDirectPredicateModifier type:NSContainsPredicateOperatorType options:0];
        [subPredicates addObject:p];
    }
}
NSPredicate *predicate = [NSCompoundPredicate andPredicateWithSubpredicates:subPredicates];
NSLog(@"predicate: %@", predicate);[self.fetchedResultsController.fetchRequest setPredicate:predicate];

1 Ответ

0 голосов
/ 09 августа 2010

Ваш предикат требует, чтобы все значения в ваших фильтруемых объектах были строками.Это правильно?

Кроме того, я бы упростил создание вашего подпредиката до:

NSPredicate * p = [NSPredicate predicateWithFormat:@"%K CONTAINS %@", [Title lowercaseString], [Value lowercaseString]];
...