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;
?
答
检查您的属性。 也许你需要在巴斯演员阵容?
答
这里没有足够的信息来知道发生了什么,但是,如果您知道提供给您的信息可能已经修复了它。所以。需要检查的几件事:
- “自我”指针是否以任何方式出现?尝试在各个点上打印出
self
的值只是为了理智的原因 - 当您的代码在Instruments中运行时,它是否以不同的模式运行? (32位与64位,垃圾收集与保留释放等)我不知道为什么这些会有效果,但如果它运行在不同的模式,这是要看的东西。
- 你是否正确地合成了setter?还是动态提供(通过核心数据等)?如果您手动指定
setBar:
方法,是否仍然出现错误?
这不会通知任何观察员的财产,它可能是甚至没有直接实施为实例变量。它可以从其他值合成。例如,“fullname”属性可以存储在“firstname”和“lastname”ivars中,并且没有任何ivar直接备份它。 – 2009-09-26 16:27:17