今天我花了一些时间追逐两个错误,最后使用相同的解决方案来修复它们。
现在我已经有了解决方案,我希望能够明白这一点。
我正在将Core Data(Integer 16 / NSNumber)的属性与Integer(ABPropertyID& ABMultiValueIdentifier)进行比较。
这个比较中的错误,奇怪的是,只有在我杀死应用程序(从后台托盘),重新打开它并运行包括比较的相同过程后才显示自己。反正...
这是重启后停止工作的原因:
if (myNumber.aProperty == [NSNUmber numberWithInt:anInteger]) { /* do stuff here */ }
到目前为止,这两个解决方案正在完美运行:
if ([myNumber.aProperty integerValue] == anInteger) {/* do stuff here */ }
if ([myNumber.aProperty isEqualToNumber:[NSNumber numberWithInt:anInteger]]) { /* do stuff here */ }
对我来说,它们看起来都一模一样。我总是要么将NSNumber转换为integerValue,要么将整数转换为NSNumber。
有什么想法吗?
答案 0 :(得分:11)
请勿使用==
来比较NSNumber
。大多数情况下,您将比较两个不同的对象,因此比较不会评估为真。如果您查看if条件,请注意您特别将自己的属性与全新 NSNumber
对象进行比较。
由于NSInteger
是某些值类型的Cocoa包装器,因此将NSInteger
与==
进行比较可以正常工作。
isEqualToNumber:
的实现可能采用包装的值类型并对它们进行比较。
答案 1 :(得分:2)
正如你所说,两种解决方案都在运作......
我更喜欢第一个,因为它看起来更具可读性,恕我直言...... 在将NSNumber转换为int之后,比较整数也可能更高效。
在第二个中,将int转换为对象,然后比较两个对象...... 所以这是第二个方法调用,在第一种情况下你没有...
希望这有助于......:)
答案 2 :(得分:1)
netWorkingButtonsIndexes
是保存对象的数组
LinkedIn
是一个int
数据类型的数字。
[[netWorkingButtonsIndexes objectAtIndex:buttonIndex] isEqual:[NSNumber numberWithInteger:LinkedIn]]
通过使用isEqual
方法,我们可以将对象与任何数据rtype进行比较。