NSPredicate compare with Integer
NSNumber
is an object type. Unlike NSString
, the actual value of NSNumber is not substitued when used with %@
format. You have to get the actual value using the predefined methods, like intValue
which returns the integer value. And use the format substituer as %d
as we are going to substitute an integer value.
The predicate should be,
predicateWithFormat:@"userID == %d", [stdUserNumber intValue]];
If you are using predicateWithSubstitutionVariables: and value you want to predicate is NSNumber with integer value then you need to use NSNumber in predicate instead of NSString as substitution value. Take a look at example:
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]]}];
}