iphone - 比较 NSNumber 和 NSInteger

标签 iphone objective-c ios nsnumber nsinteger

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

现在我有了解决方案,我希望能弄清楚它背后的原因。

我正在比较核心数据(整数 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/

相关文章:

iphone - 从 NSString 中删除特定字符

iOS 8 UITableViewCell 调整大小问题

ios - 可能有一个 UINavigationController 用于不填充整个 super UIView 的 UITableView

iphone - 将组件添加到路径 - Objective C

ios - Swift 3 尝试呈现其 View 不在窗口层次结构中

IOS 商店 ipv6 被拒绝

iphone - iOS向大量用户推送通知

iphone - 在 objective-c 中以自定义格式获取当前时间

javascript - 在不明确询问用户的情况下收集用户时区的最佳方法是什么?

iphone - 给定一组点,如何计算平滑路径的控制点?