NSPredicate сравнить с Integer - PullRequest
       16

NSPredicate сравнить с Integer

35 голосов
/ 24 сентября 2011

Как я могу сравнить два номера NSN или номер NSN и целое число в предикате NSP?

Я пытался:

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

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

Ответы [ 2 ]

89 голосов
/ 24 сентября 2011

NSNumber - это тип объекта.В отличие от NSString, фактическое значение NSNumber не подставляется при использовании в формате %@.Вы должны получить фактическое значение, используя предопределенные методы, такие как intValue, который возвращает целочисленное значение.И используйте в качестве заместителя формата %d, так как мы собираемся подставить целочисленное значение.

Предикат должен быть

predicateWithFormat:@"userID == %d", [stdUserNumber intValue]];
3 голосов
/ 01 августа 2013

Если вы используете предикатWithSubstitutionVariables: и значение, которое вы хотите предсказать, - это 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]]}];
}
...