在仪器中运行的iPhone应用程序因无法识别的选择器而失败

时间:2009-08-13 17:28:00

标签: iphone objective-c instruments

我有一个应用程序似乎在正常使用中运行没有问题。 Clang静态分析仪报告也没有问题。当我尝试在Instruments中运行它时,它会因无法识别的选择器异常而失败。

违规行是一种形式为:

的简单属性设置器
self.bar = baz;

为了弄清楚发生了什么,我在它上方添加了一个NSLog()调用:

NSLog(@"class = %@ responds = %d", [self class], [self respondsToSelector:@selector(setBar:)]);
self.bar = baz;

在仿真器(没有仪器)和设备上,这显示了我所期望的:

class = Foo responds = 1

在乐器下运行时,我得到:

class = Foo responds = 0

我很难过可能导致这种情况的原因。也许在仪器环境中,不同的内存位置会被打破?任何人都可以建议我如何调试它?

3 个答案:

答案 0 :(得分:0)

如果酒吧属于自己,你不能做bar=baz;吗?

答案 1 :(得分:0)

检查您的属性。 也许你需要在巴兹施展?

答案 2 :(得分:0)

这里没有足够的信息来了解发生了什么,但是,如果您知道要提供哪些信息,您可能已经修复了它。所以。要检查的一些事项:

  • “自我”指针是否以任何方式被调换?尝试在各个点打印出self的值只是出于理智而
  • 当您的代码在Instruments中运行时,它是否以不同的模式运行? (32位与64位,垃圾收集与保留释放等)我不确定为什么这些会产生影响,但如果它以不同的模式运行,那就是需要考虑的事情。
  • 您是否正确合成了二传手?或者它是动态提供的(通过核心数据等)?如果您手动指定setBar:方法,是否仍会收到错误?