- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
好的团队,这很奇怪。 [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/
我的 macOS 应用程序中有一个 NSSlider,名为 wave_mode_slider。我想要做的是更新输入时所述 slider 的值。所以,我所做的是: self.wave_mode_slid
我发现 [NSTextField integerValue] 对于包含千位分隔符的值的行为有所不同,具体取决于值的设置方式。 (我在德国,所以这些示例中的千位分隔符是点“.”)。 如果我调用 [myT
@property NSMutableArray*textFieldsA; @property NSMutableArray*textFieldsB; @property NSMutableArray
这是动画squareOne的代码的完成代码。单击它时,它会隐藏。如果 squareOne 使用的图像索引与 icon 相同,并且如果 squareOne 被隐藏,则动画重复。 (这是我希望分数增加的条
我在我的应用程序中使用Google Mobile Vision。我收到无法识别的选择器lldb崩溃。我已经将问题缩小到这行代码... var faceDetector = GMVDetector
好的团队,这很奇怪。 [NSDecimalNumber integerValue] 行为异常。 我坐在一个断点处,试图找出为什么我的应用程序的某些部分在 iOS8 中被破坏,我正在查看一个名为“tim
我是一名优秀的程序员,十分优秀!