gpt4 book ai didi

objective-c - {NSDecimalNumber integerValue} 在 iOS8 中表现异常

转载 作者:太空狗 更新时间:2023-10-30 03:25:56 25 4
gpt4 key购买 nike

好的团队,这很奇怪。 [NSDecimalNumber integerValue] 行为异常。

我坐在一个断点处,试图找出为什么我的应用程序的某些部分在 iOS8 中被破坏,我正在查看一个名为“timeSeconds”的变量。它在 Xcode 变量 View 中看起来像这样:

_timeSeconds    (NSDecimalNumber *) 344.514533996581994496

但是当我在调试器中查询它时,我看到了这个:

(lldb) p [self.timeSeconds doubleValue]
(double) $14 = 344.51453399658192
(lldb) p [self.timeSeconds intValue]
(int) $15 = 344
(lldb) p [self.timeSeconds integerValue]
(NSInteger) $16 = -5
(lldb) p (NSInteger)[self.timeSeconds intValue]
(NSInteger) $17 = 344

看到那个“-5”了吗?在我提交雷达之前,你们中的任何一个漂亮的人都可以重现或解释吗?

这是 SSCCE:

NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"344.514533996581994496"];
NSLog(@"%@", n); // 344.514533996581994496
NSLog(@"%ld", (long)[n intValue]); // 344
NSLog(@"%ld", (long)[n integerValue]); // -5
NSLog(@"%ld", (long)[n unsignedIntegerValue]); // 12

提前致谢!

马修

最佳答案

integerValue 的结果令人惊讶,但根据我所记录的理解:

NSDecimalNumber 继承自 NSNumber。在 NSNumber 的子类注释中指出“...子类必须覆盖与声明类型对应的访问器方法——例如,如果您的 objCType 实现返回“i”,您必须覆盖 intValue ...

objCType 设置为内部指针,因此它应该与 NSNumber 相同。

NSDecimal 不会覆盖 intergerValue。它确实会覆盖 doubleValue,因此应该可以正常工作。

唯一让我疑惑的是:它似乎也没有覆盖 intValue ...

关于objective-c - {NSDecimalNumber integerValue} 在 iOS8 中表现异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25705511/

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