gpt4 book ai didi

iphone - 比较 NSNumber 和 NSInteger

转载 作者:可可西里 更新时间:2023-11-01 04:15:05 24 4
gpt4 key购买 nike

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

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

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com