OK团队,这很奇怪. [NSDecimalNumber integerValue]行为奇怪.

我坐在一个断点,试图弄清楚为什么我的应用程序的某些部分在iOS8中被破坏,我正在看一个名为“timeSeconds”的变量.在Xcode变量视图中看起来像这样:

_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 …

{NSDecimalNumber integerValue}在iOS8中表现奇怪的更多相关文章

  1. xcode – 如何通过LLDB命令行添加断点操作?

    如果你从Xcode编辑一个断点,有一个超级有用的选项,可以添加一个“Action”,以便在每次遇到断点时自动执行.如何从LLDB命令行添加此类操作?

  2. xcode – 如何在LLDB断点条件下使用堆栈内容?

    问题:我有一种情况,我们在发布期间有媒体播放,并且objc_exception_throw()在此期间大约有5次点击,但总是被捕获,并且它在媒体播放器对象的南边.我厌倦了(a)必须手动连续n次,或者(b)在播放完成之前必须禁用断点.我尝试过的:>使断点忽略前五次命中(问题:它并不总是正好五次)>使用我的目标作为模块创建我自己的符号断点(问题:没有改变)我想做什么:想到的一个解决方案是在断点命中时评

  3. ios – lldb断点在类目标c中的所有方法

    如何使用lldb在ObjectiveC类中的所有方法上自动设置断点?

  4. {NSDecimalNumber integerValue}在iOS8中表现奇怪

    任何一个美丽的人可以复制还是解释一下,在我提交雷达之前?这是SSCCE:提前致谢!马修解决方法integerValue的结果令人惊讶,但是从我所理解的文档中可以看出:NSDecimalNumber继承自NSNumber.在NSNumber的子类注释中,它表示“…子类必须重写与声明类型相对应的访问器方法–例如,如果您的objCType实现返回”i“,则必须覆盖intValue…”objCType设置为内部指针,因此它应该与NSNumber相同.NSDecimal不会覆盖intergerValue.它覆盖do

  5. ios – 如何使用lldb expr(DEBUGGING控制台)在运行时设置UIView的框架

    我正在尝试以下方法我越来越我正在使用XCode6.1,LLDB版本lldb-320.4.152解决方法好的,这是一种有效的方法

  6. swift详解之二十九------谈谈debug的一些高级用法lldb

    swift详解之二十九——谈谈debug的一些高级用法lldb在软件编程中,debug是一项必须掌握的技术。expressionexpression命令可以用来修改变量的值下面来看看我们应该怎么用这些常用的命令首先创建一个简单的工程,拖一个label和一个button上去然后在代码中添加相应的属性和事件然后在label.text=txt这里打上断点运行app,点击测试按钮。自己试试expression是用来修改值得,短写expr你可以点击按钮,运行到断点的时候使用exprtxt="xxx"来修改txt的值

  7. Swift 代码调试核武-LLDB调试基础

    viewmode=list我的stackoverflow前言:LLDB是个开源的调试器,与XCode绑定的LLDB的使用中,Swift与ObjectiveC还是有一些差别的本文主要侧重LLDB的常用命令资料,非XCode7.2+本文代码可能不能运行objc.ioApple官方文档LLDB的文档一个封装LLDB的库,可以辅助调试2015WWDC视频对了,Swift到现在也不过一岁半,所以LLDB对于Swift的支持肯定不如OC那么好。

  8. 使用LLDB调试Swift

    LLDB是个很好的选择。接下来我会探讨一些工作中常用到的一些LLDB调试技巧。LLDB拥有大量有用的调试工具。LLDB的bugreport命令可以生成一份详细的app当前状态的报告。这些命令有针对C++,Objective-C,Swift和RenderScript的。使用LLDB的这些命令可以让调试变得更自动化。process用于控制要调试的进程,可把LLDB依附到特定target或从target上解绑。processstatus用于打印当前进程及断点处的相关信息:使用如下命令可继续执行:这等同于Xcod

  9. LLDB中的po与swift

    如何在使用LLDB的Swift应用程序中绘制变量的值?早些时候它像povariable_name现在我通常得到一些讨厌的错误,如:这个错误听起来像是可能是因为DWARF不告诉LLDB在哪里找到你的“自我”对象。鉴于Swift的本质,LLDB需要知道自我的类型,以便能够在本地作用域内插入一个表达式找到这是你的问题的一种方法是在LLDB提示符处:帧变量-Lself你可能不会看到它的位置。值得提交的错误报告,只是为了跟踪你的具体繁殖情况无论如何,要得到你的问题的大部分。

  10. Swift LLBD消息“”

    当我尝试打印出一个对象的描述时,我在Swift调试器中遇到了一个非常令人讨厌的问题.当尝试打印和对象时,使用po命令或frv命令,我会收到消息错误::1:1:错误:使用未解析的标识符’self’自^要么self=这里发生了什么?.字符串是有一些文本的东西.调试器喜欢知道的事情之一是类型的“字节大小”,这种类型的对象占用的内存中有多少字节?

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部