我在Xcode 4.2.1(启用ARC的项目)中遇到一个奇怪的异常,我无法追查到问题的根源。
这就是异常的样子:
2012-03-18 22:19:32.855 Project[14225:707] +[UIPickerTableViewTitledCell isEqualToString:]: unrecognized selector sent to class 0x3f2bbec4
2012-03-18 22:19:32.859 Project[14225:707] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[UIPickerTableViewTitledCell isEqualToString:]: unrecognized selector sent to class 0x3f2bbec4'
什么是UIPickerTableViewTitledCell?我想这是UIPickerView使用的内部类。但我在项目的任何地方都没有引用该课程。
我的应用程序设置为Tab Bar应用程序,每个选项卡中都有一个导航控制器,此特定选项卡有一个tableview和pickerview。
答案 0 :(得分:3)
听起来你有一个过度释放的物体。我知道在ARC之前的代码中,释放被称为太多次了。代码听起来像是在寻找一个NSString来发送isEqualToString:to,但它不是获取已经发布的NSString,而是获取UIPickerTableViewTitledCell的这个随机实例。
我会启用Zombies。在Xcode 4.2.1中,您可以在菜单项Product > Edit Scheme
中找到它。转到Diagnostics
标签。然后是Enable Zombie Objects
复选框。这将使您的过度释放对象成为僵尸,这样您就可以准确找出导致崩溃的对象。
我会阅读Apple doc Technical Note TN2239: iOS Debugging Magic以获取更深入的信息。整个文档很棒,但你可以从阅读标题为“僵尸!”的部分开始。和“更多的僵尸!”