
我坐在一个断点,试图弄清楚为什么我的应用程序的某些部分在iOS8中被破坏,我正在看一个名为“timeSeconds”的变量.在Xcode变量视图中看起来像这样:
_timeSeconds (NSDecimalNumber *) 344.514533996581994496
但是当我在调试器中查询时,我看到:
(lldb) p [self.timeSeconds doubleValue](double) = 344.51453399658192(lldb) p [self.timeSeconds intValue](int) = 344(lldb) p [self.timeSeconds integerValue](NSInteger) = -5(lldb) p (NSInteger)[self.timeSeconds intValue](NSInteger) = 344
看到“-5”?任何一个美丽的人可以复制还是解释一下,在我提交雷达之前?
这是SSCCE:
NSDecimalNumber *n = [NSDecimalNumber decimalNumberWithString:@"344.514533996581994496"];NSLog(@"%@",n); // 344.514533996581994496NSLog(@"%ld",(long)[n intValue]); // 344NSLog(@"%ld",(long)[n integerValue]); // -5NSLog(@"%ld",(long)[n unsignedIntegerValue]); // 12
提前致谢!
马修
解决方法 integerValue的结果令人惊讶,但是从我所理解的文档中可以看出:NSDecimalNumber继承自NSNumber.在NSNumber的子类注释中,它表示
“…子类必须重写与声明类型相对应的访问器方法 – 例如,如果您的objCType实现返回”i“,则必须覆盖intValue …”
objCType设置为内部指针,因此它应该与NSNumber相同.
NSDecimal不会覆盖intergerValue.
它覆盖doubleValue,所以应该工作正常.
唯一让我奇怪的是:它似乎不会覆盖intValue …
总结以上是内存溢出为你收集整理的{NSDecimalNumber integerValue}在iOS8中表现奇怪全部内容,希望文章能够帮你解决{NSDecimalNumber integerValue}在iOS8中表现奇怪所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)