我有一个变量,它是一个类型为long的NSNumber。它应该保持值-1。 当我将其记录到控制台时,它会显示预期值-1。
NSLog(@"myVariable %@", self.myVariable);
但if子句中的以下表达式为false。
if (myVariable == [NSNumber numberWithInt:-1]) {
...
}
调试器显示值72057594037927935。有人知道它有什么问题吗?
谢谢!
答案 0 :(得分:1)
将NSNumber
与其他对象进行比较时,您有两个选项可以执行不同的操作:
==
检查两个对象是否代表完全相同的对象实例,或isEqual:
方法检查两个对象是否代表相同的值。在您的情况下,最安全的方法是使用第二种替代方法
if ([myVariable isEqual:[NSNumber numberWithLong:-1]]) {
...
}
==
方法可能有效,也可能无效,具体取决于您生成myVariable
的方式。
答案 1 :(得分:1)
NSObject有一个方法:(NSString *)描述 当您将对象放在NSLog方法上时,此方法将定义打印出来的内容。
NSNumber继承了NSObject,并且描述方法以打印原始值的方式实现,这就是您使用NSLog(@"myVariable %@", self.myVariable);
运营商" =="将比较这种情况下的2个对象(比较指针和值)==>在你的情况下,它将返回false
如果要比较2个NSNumbers的原始值,请使用以下方法(BOOL)isEqualToNumber:(NSNumber *)number;