将NSNumber与NSInteger进行比较

dji*_*i33 5 iphone objective-c nsnumber nsinteger ios

我今天花了一些时间追逐两个错误,并最终使用相同的解决方案修复它们.

现在我已经找到了解决方案,我希望能够明白这一点.

我正在将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.

有任何想法吗?

Bol*_*ock 11

不要==用来比较NSNumbers.大多数情况下,您将比较两个不同的对象,因此比较不会评估为真.如果您查看if条件,请注意您特别将您的财产与一个全新的 NSNumber对象进行比较.

因为NSInteger是某些值类型的Cocoa包装器,所以比较NSIntegers和==工作正常.

实现isEqualToNumber:可能采用包装的值类型并进行比较.