Подтвердить что ты не робот

Сравнение NSPredicate с Integer

Как сравнить два NSNumbers или NSNumber и Integer в NSPredicate?

Я пробовал:

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

Ну, это не работает... у кого есть идея, как это сделать? Я уверен, что это довольно легко, но я ничего не смог найти...

4b9b3361

Ответ 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]]}];
}