【问题标题】:Xcode how to debug unrecognized selector sent to instanceXcode如何调试发送到实例的无法识别的选择器
【发布时间】:2016-04-25 16:36:19
【问题描述】:

好的,据我所知,当我调用一个旨在将视图放入正确框中的设置器时,我遇到了错误。

_parrentViewFrame = parrentViewFrame;
self.containerView.frame = _parrentViewFrame;
self.containerView.bounds = _parrentViewFrame;
[self.containerView layoutIfNeeded];

在 layoutIfNeeded 上出现此错误

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[__NSCFNumber 长度]:无法识别的选择器发送到实例 0xb000000000000343”

现在我在整个应用程序中都有类似的代码,并且运行良好。我在 -[NSObject(NSObject) doesNotRecognizeSelector:] 处放置了一个符号断点。但这并没有真正的帮助。我仍然不知道它正在尝试调用哪个对象。 containerView 是一个简单的 UIView。该实例始终为 0xb000000000000343,不确定这是否重要,但似乎确实如此。我该如何调试这个问题?

【问题讨论】:

  • 您将NSNumber 分配给NSString 属性的位置。您是从数组或字典中获取数据吗?也许您认为是字符串的值实际上是一个数字。
  • 查看异常的回溯可能会很有用。这会告诉你哪个代码实际上正在发送-length。根本不清楚您发布的代码是否涉及。
  • 此异常[__NSCFNumber length] 表示您已将NSNumber 分配给NSString。并且可以在 Xcode 中为调试方案添加一个异常断点
  • 在lldb命令中添加“所有异常”并注释“bt”的结果。

标签: ios objective-c xcode debugging


【解决方案1】:

可能会发生以下两种情况之一:

  1. 正如 rmaddy 指出的那样,您可能已将 NSNumber 分配给不是 NSNumber 的属性。 NSString 似乎是符合UILayoutSupport 的候选对象或对象。

  2. 您可能过度释放了一个对象,而 NSNumber 正在取代该指针,因此选择器调用错误。如果是这种情况,您可以打开 NSZombies,这将帮助您捕获过度释放的对象。在诊断下的方案设置中启用 NSZombies。

【讨论】:

    猜你喜欢
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 2012-07-24
    相关资源
    最近更新 更多