web-dev-qa-db-fra.com

NSPredicate comparer avec Integer

Comment puis-je comparer deux NSNumbers ou un NSNumber et un Integer dans un NSPredicate?

J'ai essayé:

NSNumber *stdUserNumber = [NSNumber numberWithInteger:[[NSUserDefaults standardUserDefaults] integerForKey:@"standardUser"]];
    fetchRequest.predicate = [NSPredicate predicateWithFormat:@"userID == %@", stdUserNumber];

Eh bien, cela ne fonctionne pas ... quelqu'un a une idée de comment le faire? Je suis sûr que c'est assez facile mais je n'ai rien trouvé ...

36
wolfrevo

NSNumber est un type d'objet. Contrairement à NSString, la valeur réelle de NSNumber n'est pas substituée lorsqu'elle est utilisée avec %@ format. Vous devez obtenir la valeur réelle en utilisant les méthodes prédéfinies, comme intValue qui renvoie la valeur entière. Et utilisez le substituant de format comme %d car nous allons substituer une valeur entière.

Le prédicat doit être,

predicateWithFormat:@"userID == %d", [stdUserNumber intValue]];
90
EmptyStack

Si vous utilisez predicateWithSubstitutionVariables: et que la valeur que vous souhaitez prédiquer est NSNumber avec une valeur entière, vous devez utiliser NSNumber dans le prédicat au lieu de NSString comme valeur de substitution. Jetez un œil à l'exemple:

NSPredicate *genrePredicate = [NSPredicate predicateWithFormat:[NSString stringWithFormat:@"genreID == $GENRE_ID"]]; //if we make only one NSPredicate if would look something like this: [NSPredicate predicateWithFormat:@"genreID == %d", [someString integerValue]];

NSPredicate *localPredicate = nil;
for(NSDictionary *genre in genresArray){
    localPredicate = [genrePredicate predicateWithSubstitutionVariables:@{@"GENRE_ID" : [NSNumber numberWithInteger:[genre[@"genre_id"] integerValue]]}];
}
3
Josip B.