问题
I'm getting a strange exception in Xcode 4.2.1 (ARC-enabled project) that I can't track down to the root of the problem.
This is what the exception looks like:
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'
What is a UIPickerTableViewTitledCell? I suppose it is some internal class for the UIPickerView to use. But I'm not referencing that class anywhere in my project.
My application is setup as a Tab Bar application with a navigation controller in each tab and this particular tab has a tableview and pickerview.
回答1:
It sounds like you have an over-released object. I get that when in pre-ARC code, release is called one too many times. The code sounds like it is looking for an NSString to send isEqualToString: to but instead of getting the NSString which has been released already, it gets this random instance of UIPickerTableViewTitledCell.
I would enable Zombies. In Xcode 4.2.1, you can find it in the menu item Product > Edit Scheme
. Go to the Diagnostics
tab. Then there is an Enable Zombie Objects
checkbox. This will make your over-released object into a Zombie, so you can figure out exactly what object is causing your crash.
I would read the Apple doc Technical Note TN2239: iOS Debugging Magic for more in-depth information on this. The whole doc is great, but you can start off by reading the sections titled "Zombies!" and "More Zombies!"
来源:https://stackoverflow.com/questions/9762457/ios-weird-exception