Question

Every time a user taps the home button while my app is active, I am getting the following exception. Slight caveat - The example exception below references NSCFString. However, the type of object that gets sent this message, and thus causes the exception is totally random. It could be an NSData or an OS_dispatch_queue_specific_queue.

[__NSCFString didEnterBackground:]: unrecognized selector sent to instance 0x155344c0 * Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString didEnterBackground:]: unrecognized selector sent to instance 0x155344c0

Happens every single time the app is resigned active, but the object receiving the message is never the same.

I assume this is some sort of memory issue but am having trouble tracking it down. Mostly because nothing in my code ever directly sends/receives this message, or is registered to receive the UIApplicationWillResignActiveNotification. Also, there is nothing in my appDelegate for the applicationDidEnterBackground:application method.

Has anyone ever seen this type of behavior? And if so, what is the best way to debug? Or maybe another way, what sorts of objects would be automatically sent the didEnterBackground message that I am clearly mismanaging?

Was it helpful?

Solution

It sounds like you have a zombie.

A zombie is an object that gets called after it is deallocated. Often, the memory address of the object is then used for another object, so the message goes to the wrong object.

Do you have code that registers one of your application objects for a "did enter background" notification (UIApplicationDidEnterBackgroundNotification) using the method addObserver:selector:name:object:? And does that notification specify a selector of "didEnterBackground:?"

My guess is that you're registering for UIApplicationDidEnterBackgroundNotification notifications, and then the notificationObserver you're specifying is being deallocated. That would cause the exact behavior you are describing.

BTW, you might want to run your app using the zombies instrument, or turn on the NSZombies environment variable to look for zombies. Then press the home button to cause the crash and see what Xcode/instruments tells you.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top