Mat*_*hew 10 objective-c nsdecimalnumber ios8
好的团队,这很奇怪.[NSDecimalNumber integerValue]表现得很奇怪.
我坐在一个断点处,试图弄清楚为什么我的应用程序的某些部分在iOS8中被破坏了,而我正在查看一个名为"timeSeconds"的变量.在Xcode变量视图中看起来像这样:
_timeSeconds (NSDecimalNumber *) 344.514533996581994496
Run Code Online (Sandbox Code Playgroud)
但是当我在调试器中查询它时,我看到了这个:
(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
Run Code Online (Sandbox Code Playgroud)
看到"-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
Run Code Online (Sandbox Code Playgroud)
提前致谢!
马修
dog*_*god 14
integerValue的结果令人惊讶,但据我所知,记录如下:
NSDecimalNumber继承自NSNumber.在来自NSNumber的子类注释中,声明" ......子类必须覆盖与声明的类型相对应的访问器方法 - 例如,如果你的objCType实现返回"i",你必须覆盖intValue ...... "
objCType设置为内部指针,因此它应该与NSNumber相同.
NSDecimal不会覆盖intergerValue.它确实覆盖了doubleValue,因此应该可以正常工作.
唯一让我惊讶的是:它似乎也没有覆盖intValue ......
| 归档时间: |
|
| 查看次数: |
626 次 |
| 最近记录: |