我正在尝试将NSPredicate与64位数字一起使用,但由于某种原因它失败了。我用以下字符串创建一个谓词:
[NSString stringWithFormat:@"UID == %qu", theUID]
它总是失败。然而,如果我遍历我的对象并比较if ( UID == theUID )
,我发现一个很好。我真的很困惑为什么这不能正常工作。
以上看起来是否正确?我的谓词适用于其他整数甚至字符串。但这似乎失败了。
谢谢!
编辑:太奇怪......所以我通过以下方式创建谓词:
NSPredicate *myPredicate = [NSPredicate predicateWithFormat:myString];
现在,当我打印myString,然后打印myPredicate(通过执行NSLog(@"%@", blah);
)时,我得到:
字符串:UID == 17667815990388404861谓词:UID == 9223372036854775807
这是相同的字符串,为什么这些不同?
答案 0 :(得分:2)
可能UID不是无符号值?
构建谓词的更健壮的方法是传入NSNumber:
NSNumber *theUIDNum = [NSNumber numberWithUnsignedLongLong:theUID];
[NSString stringWithFormat:@"UID == %@", theUID]
这为您提供了调试和打印出UINum值以确保其转换正确的奖励功能。
答案 1 :(得分:0)
在您的NSPredicate
中,您可以使用类似的
let myNSNumber = NSNumber(value: theUID)
let predicate = NSPredicate(format: "UID = %i", myNSNumber.int64Value)