Сравнение NSPredicate с Integer
Как сравнить два NSNumbers или NSNumber и Integer в NSPredicate?
Я пробовал:
NSNumber *stdUserNumber = [NSNumber numberWithInteger:[[NSUserDefaults standardUserDefaults] integerForKey:@"standardUser"]];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"userID == %@", stdUserNumber];
Ну, это не работает... у кого есть идея, как это сделать?
Я уверен, что это довольно легко, но я ничего не смог найти...
Ответы
Ответ 1
NSNumber
- тип объекта. В отличие от NSString
, фактическое значение NSNumber не заменяется при использовании формата %@
. Вы должны получить фактическое значение, используя предопределенные методы, например intValue
, который возвращает целочисленное значение. И используйте формат substituer как %d
, поскольку мы собираемся заменить целочисленное значение.
Предикат должен быть,
predicateWithFormat:@"userID == %d", [stdUserNumber intValue]];
Ответ 2
Если вы используете predicateWithSubstitutionVariables: и значение, которое вы хотите предикатировать, является NSNumber с целым числом, тогда вам нужно использовать NSNumber в предикате вместо NSString в качестве значения подстановки. Взгляните на пример:
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]]}];
}