2011-12-19 1 views
1

Est-il possible de substituer des mots réservés, en particulier OR et AND, dans un predicateFormat?+ [NSPredicate predicateWithFormat] remplacer les mots réservés

J'ai essayé:

NSString *andOr = (isAnd ? @"AND" : @"OR"); // isAnd is a BOOL variable 
NSPredicate *predicate = [NSPredicate predicateWithFormat: 
          @"firstName == %@ %K lastName == %@", 
          user.firstName, andOr, user.lastName]; 

mais je me suis:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', 
reason: 'Unable to parse the format string "firstName == %@ %K lastName == %@" 

J'ai essayé %s (et %S) au lieu de %K mais nous avons eu la même exception.

Ma solution de travail pour l'instant est de créer le predicateFormat séparément.

NSString *predicateFormat = [NSString stringWithFormat: 
          @"firstName == %%@ %@ lastName == %%@", andOr]; 
NSPredicate *predicate = [NSPredicate predicateWithFormat:predicateFormat, 
          user.firstName, user.lastName]; 

Mais, je me demandais si cela pouvait se faire sans créer predicateFormat séparément.

Répondre

1

Eh oui, il peut:

NSPredicate *firstName = [NSPredicate predicateWithFormat:@"firstName == %@", [user firstName]]; 
NSPredicate *lastName = [NSPredicate predicateWithFormat:@"lastName == %@", [user lastName]]; 
NSArray *subpredicates = [NSArray arrayWithObjects:firstName, lastName, nil]; 

NSPredicate *predicate = nil; 
if (isAnd) { 
    predicate = [NSCompoundPredicate andPredicateWithSubpredicates:subpredicates]; 
} else { 
    predicate = [NSCompoundPredicate orPredicateWithSubpredicates:subpredicates]; 
} 
0

Utilisation de texte recherche barre i am filtrer les données.

Ci-dessous le code est simple et pas besoin d'aucune explication

NSString * predFormat = [NSString stringWithFormat: @ "FirstName CONTIENT [c] '% @' OR LastName CONTIENT [c] '% @' ou par téléphone CONTIENT [c] '% @' ", searchValue, searchValue, searchValue]; // COMME

NSPredicate * predicate = [NSPredicate predicateWithFormat: predFormat];

NSArray * tempData = [array filteredArrayUsingPredicate: predicate];

Espérons que cela fonctionnera pour vous .. Happy coding ....

Questions connexes