我在 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 使用的一些内部类。但我没有在我的项目中的任何地方引用该类。
我的应用程序设置为一个选项卡栏应用程序,每个选项卡中都有一个导航 Controller ,这个特定的选项卡有一个 TableView 和选择器 View 。
最佳答案
听起来你有一个过度释放的对象。我知道在 ARC 之前的代码中,release 被调用了太多次。这段代码听起来像是在寻找一个 NSString 来发送 isEqualToString: 到,但它不是获取已经发布的 NSString,而是获取这个 UIPickerTableViewTitledCell 的随机实例。
我会启用僵尸。在 Xcode 4.2.1 中,您可以在菜单项 Product > Edit Scheme
中找到它。转到 诊断
选项卡。然后有一个 Enable Zombie Objects
复选框。这将使您过度释放的对象变成僵尸,因此您可以准确找出导致崩溃的对象。
我会阅读 Apple 文档 Technical Note TN2239: iOS Debugging Magic有关这方面的更深入的信息。整个文档都很棒,但您可以先阅读标题为“僵尸!”的部分。和“更多的僵尸!”
关于iOS——奇怪的异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9762457/