【发布时间】: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 次测试运行中没有发生这种情况。我的手指交叉了。)