如何比较NSPredicate中的两个NSNumber或NSNumber和Integer?
我试过了:
NSNumber *stdUserNumber = [NSNumber numberWithInteger:[[NSUserDefaults standardUserDefaults] integerForKey:@"standardUser"]];
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"userID == %@", stdUserNumber];
嗯,这不起作用......任何人都知道如何做到这一点? 我确定这很容易,但我找不到任何东西......
答案 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]]}];
}