NSPredicate与Integer进行比较

时间:2011-09-24 16:37:32

标签: ios core-data nspredicate

如何比较NSPredicate中的两个NSNumber或NSNumber和Integer?

我试过了:

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

嗯,这不起作用......任何人都知道如何做到这一点? 我确定这很容易,但我找不到任何东西......

2 个答案:

答案 0 :(得分:88)

NSNumber是一种对象类型。与NSString不同, NSNumber 的实际值在与%@格式一起使用时不会被替换。您必须使用预定义的方法获取实际值,例如返回整数值的intValue。并使用格式替换为%d,因为我们将替换整数值。

谓词应该是,

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

答案 1 :(得分:3)

如果您正在使用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]]}];
}