我今天花了一些时间追查两个错误,并最终使用相同的解决方案修复了这两个错误。
现在我有了解决方案,我希望能弄清楚它背后的原因。
我正在比较核心数据(整数 16/NSNumber)中的一个属性和一个整数(ABPropertyID 和 ABMultiValueIdentifier)。
这个错误出现在这个比较中,奇怪的是,只有在我关闭应用程序(从后台托盘),重新打开它,并运行包含比较的相同过程后才会出现。无论如何...
这是重启后停止工作的:
if (myNumber.aProperty == [NSNUber numberWithInt:anInteger]) {/* 在这里做一些事情 */}
这是目前为止运行良好的两个解决方案:
if ([myNumber.aProperty integerValue] == anInteger) {/* 在这里做事 */}
if ([myNumber.aProperty isEqualToNumber:[NSNumber numberWithInt:anInteger]]) {/* 在这里做一些事情 */}
对我来说,它们看起来都一样。我总是要么将 NSNumber 转换为整数值,要么将整数转换为 NSNumber。
有什么想法吗?
最佳答案
不要使用==
来比较NSNumber
。大多数时候,您将比较两个不同的对象,因此比较的计算结果不会为真。如果您查看 if 条件,请注意您特别将您的属性与全新 NSNumber
对象进行比较。
因为 NSInteger
是某些值类型的 Cocoa 包装器,比较 NSInteger
和 ==
工作正常。
isEqualToNumber:
的实现可能采用包装的值类型并对它们进行比较。
关于iphone - 比较 NSNumber 和 NSInteger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5415418/