iPhone应用程序中运行的iPhone应用程序失败,无法识别选择器

问题描述:

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

出错行的形式是一个简单的属性设置:

self.bar = baz; 

为了弄清楚是怎么回事,我添加了一个的NSLog()立即调用它上面:

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

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

class = Foo responds = 1

当在仪器运行时,我得到:

类=美孚响应= 0

我很为难,什么可能导致此。当它在Instruments环境中时,其他内存位置可能会受到影响?任何人都可以建议我如何调试?

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

+0

这不会通知任何观察员的财产,它可能是甚至没有直接实施为实例变量。它可以从其他值合成。例如,“fullname”属性可以存储在“firstname”和“lastname”ivars中,并且没有任何ivar直接备份它。 – 2009-09-26 16:27:17

检查您的属性。 也许你需要在巴斯演员阵容?

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

  • “自我”指针是否以任何方式出现?尝试在各个点上打印出self的值只是为了理智的原因
  • 当您的代码在Instruments中运行时,它是否以不同的模式运行? (32位与64位,垃圾收集与保留释放等)我不知道为什么这些会有效果,但如果它运行在不同的模式,这是要看的东西。
  • 你是否正确地合成了setter?还是动态提供(通过核心数据等)?如果您手动指定setBar:方法,是否仍然出现错误?