【问题标题】:What does this method call: [NSPathStore2 setDelegate:]这个方法叫什么:[NSPathStore2 setDelegate:]
【发布时间】:2012-10-10 22:50:50
【问题描述】:

我在非常有限的情况下中止了,我正试图找出是什么语句或语句导致了它。控制台说:

由于未捕获的异常而终止应用 'NSInvalidArgumentException',原因:'-[NSPathStore2 setDelegate:]: 无法识别的选择器发送到实例 0x1d50dcb0'

NSPathStore2 没有出现在我的代码中的任何位置,因此必须由我正在使用的某个框架调用。实例地址没有出现在其他任何地方,所以我不知道那是什么。

我尝试使用断点来捕获中止发生的时间,但它不再发生。所以可能是时间问题。我在其他帖子中读到 NSPathStore2 是 NSString 的一部分,所以我尝试将打印语句放在各种字符串语句周围,但这没有帮助。在 developer.apple.com 中搜索 NSPathStore2 没有找到任何东西。

我认为中止发生在 init 方法期间,但该方法很长,并且在完成之前会调用其他长方法。此外,它仅在运行了 5 分钟的操作序列后并且仅在从 Xcode 全新安装后才会发生。如果我第二次运行该应用程序,它不会中止。因此,试图找到它的来源非常耗时。

【问题讨论】:

  • 这是 Xcode 4.5,在带有 iOS 5.1.1 的 iPhone 4 上测试。而且我很确定这个应用程序有足够的内存。
  • 您是否设置了任何您不确定的委托?
  • 通常,当您对对象的类做出错误假设时,会发生无法识别的选择器,因此记录字符串方法无济于事。您应该查看设置委托的任何位置并记录您调用它的对象的类。
  • mkral 和 ughoavgfhw:你们的 cmets 让我找到了答案。我使用的是 Accelerator.delegate = ... 其中 Accelerator 是一个 ivar,它是很久以前创建的并且没有保留。到该声明出现时,它已经超出了范围。如果您想重写您的评论作为答案,我可以给它一个检查。我保留了加速器并且中止消失了(至少在 2 次测试运行中没有发生这种情况。我的手指交叉了。)

标签: ios debugging abort


【解决方案1】:

这是一个非常常见的症​​状,即您有一个已释放的对象仍在某处使用。在您的调试方案中选中“启用僵尸对象”并查找您在何处调用已释放对象的方法。

【讨论】:

  • 我不认为启用僵尸会找到它。我已经想到了僵尸,但僵尸通常会导致“EXEC_BAD_ACCESS”,而这是中止。但感谢您的回复。你的想法很接近。
  • 请告诉我们是什么解决了您的问题,以便我们下次参考
猜你喜欢
  • 2011-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-28
  • 2020-06-21
  • 1970-01-01
相关资源
最近更新 更多