这个方法叫啥:[NSPathStore2 setDelegate:]
Posted
技术标签:
【中文标题】这个方法叫啥:[NSPathStore2 setDelegate:]【英文标题】: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 次测试运行中没有发生这种情况。我的手指交叉了。) 【参考方案1】:这是一个非常常见的症状,即您有一个已释放的对象仍在某处使用。在您的调试方案中选中“启用僵尸对象”并查找您在何处调用已释放对象的方法。
【讨论】:
我不认为启用僵尸会找到它。我已经想到了僵尸,但僵尸通常会导致“EXEC_BAD_ACCESS”,而这是中止。但感谢您的回复。你的想法很接近。 请告诉我们是什么解决了您的问题,以便我们下次参考以上是关于这个方法叫啥:[NSPathStore2 setDelegate:]的主要内容,如果未能解决你的问题,请参考以下文章
*** __NSAutoreleaseNoPool():NSPathStore2 类的对象 0x926d620 自动释放,没有适当的池 - 只是泄漏