Oui vous pouvez, mais vous devez modifier légèrement la chaîne de format.
Au lieu de faire:
[preds appendFormat:@" (attending = %@)", prov];
Vous auriez besoin de le faire:
[preds appendFormat:@" (attending = '%@')", prov];
Notez l'utilisation des guillemets simples autour du modificateur %@
. C'est ainsi que le prédicat sait que c'est une valeur constante.
Cependant, même si vous suivez cette route, vous êtes toujours bloqué en utilisant predicateWithFormat:
, ce que vous semblez vouloir éviter. Vous aurez probablement des problèmes avec la façon dont vous utilisez NSNull
dans la chaîne de format.
Je recommande de faire quelque chose comme ceci:
NSArray *provs = [self.providerCode componentsSeparatedByString:@"|"];
NSMutableArray *providerPredicates = [NSMutableArray array];
NSPredicate *template = [NSPredicate predicateWithFormat:@"attending = $prov OR admitting = $prov OR consulting CONTAINS[cd] $prov"];
for (NSString *prov in provs) {
NSDictionary *substitutions = [NSDictionary dictionaryWithObject:prov forKey:@"prov"];
NSPredicate *p = [template predicateWithSubstitutionVariables:substitutions];
[providerPredicates addObject:p];
}
NSPredicate *final = [NSPredicate predicateWithFormat:@"inpatient = 1 AND dischargedate != nil"];
if ([providerPredicates count] > 0) {
NSPredicate *providers = nil;
if ([providerPredicates count] > 1) {
providers = [NSCompoundPredicate orPredicateWithSubpredicates:providerPredicates];
} else {
providers = [providerPredicates objectAtIndex:0];
}
final = [NSCompoundPredicate andPredicateWithSubpredicates:[NSArray arrayWithObjects:final, providers, nil]];
}
Ce utilise un couple de choses différentes soignées:
- variables prédicats. Vous analysez la chaîne de format
@"attending = $prov OR admitting = $prov OR consulting CONTAINS[cd] $prov"
une seule fois, puis remplacez simplement par de nouvelles valeurs pour $prov
chaque fois que vous avez un fournisseur différent
- Construire des prédicats composés. Vous utilisez des méthodes de classe sur
NSCompoundPredicate
pour transformer plusieurs prédicats en un seul prédicat groupé OR
ou AND
.
Merci dave ... Votre solution a bien fonctionné !! – user680891
@ user680891 content de l'entendre! Pour marquer ma réponse comme acceptée, cliquez sur la coche sous les flèches de haut/bas. –