2010-08-09 7 views
1

Je crée un NSPredicate en utilisant le code ci-dessous pour une application iPhone. La consignation indique que le préfixe est: emplacement CONTIENT "tête" ET forme CONTIENT "ovale" ET texture CONTIENT "bosselé" ET couleur CONTIENT "rouge"NSCompoundPredicate ne correspond pas

Je n'ai aucun résultat. Si je limite le prédicat à un seul élément, cela fonctionnera, plus d'un échec.

Quelqu'un peut-il me dire pourquoi?

Un grand merci

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]; 
+0

Pour ajouter un peu plus d'informations. Ce que je suis après serait le même que SELECT * FROM Table WHERE (emplacement LIKE '% head%') ET (forme LIKE '% oval%') ET (texture LIKE '% bumpy%') ET (couleur LIKE '% red% ') – BigBadOwl

Répondre

0

Votre prédicat exige que toutes les valeurs dans vos objets filtrables être des chaînes. Est-ce exact?

Aussi, je vous simplifier la création de subpredicate à:

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

Merci de répondre, oui, ils seront tous des valeurs de chaîne. – BigBadOwl

+0

En fait, ça marche très bien, je suis idiot! – BigBadOwl

Questions connexes