title: View Controller being sent a message even though it has been deallocated
body: <p>I am not sure if something has changed in the iPhone SDK 3.0 but I am getting the strangest error. I have a view controller hierarchy where I switch between view controllers depending upon interface orientation. From what I can tell, the error is caused whenever I rotate the interface a view controller which has been deallocated is being sent a shouldAutorotateToInterfaceOrientation message. This is the backtrace for the error:</p>
  
  <pre><code>#0 0x01dc43a7 in ___forwarding___
  #1 0x01da06c2 in __forwarding_prep_0___
  #2 0x002e6733 in -[UIWindow _shouldAutorotateToInterfaceOrientation:]
  #3 0x002e6562 in -[UIWindow _updateToInterfaceOrientation:duration:force:]
  #4 0x002e6515 in -[UIWindow _updateInterfaceOrientationFromDeviceOrientation]
  #5 0x0004d63a in _nsnote_callback
  #6 0x01d8f005 in _CFXNotificationPostNotification
  #7 0x0004aef0 in -[NSNotificationCenter postNotificationName:object:userInfo:]
  #8 0x0045b454 in -[UIDevice setOrientation:]
  #9 0x002d6890 in -[UIApplication handleEvent:withNewEvent:]
  #10 0x002d16d3 in -[UIApplication sendEvent:]
  #11 0x002d80b5 in _UIApplicationHandleEvent
  #12 0x024c2ef1 in PurpleEventCallback
  #13 0x01d9bb80 in CFRunLoopRunSpecific
  #14 0x01d9ac48 in CFRunLoopRunInMode
  #15 0x024c17ad in GSEventRunModal
  #16 0x024c1872 in GSEventRun
  #17 0x002d9003 in UIApplicationMain
  #18 0x00002d50 in main at main.m:14
  </code></pre>
  
  <p>The error that is getting printed to the Debug Console with NSZombieEnabled is:</p>
  
  <pre><code>2009-10-18 20:28:34.404 Restaurants[12428:207] *** -[ToolbarController respondsToSelector:]: message sent to deallocated instance 0x3b2b2a0
  (gdb) continue
  Current language:  auto; currently objective-c
  2009-10-18 20:31:43.496 Restaurants[12428:207] *** NSInvocation: warning: object 0x3b2b2a0 of class '_NSZombie_BeltToolbarController' does not implement methodSignatureForSelector: -- trouble ahead
  2009-10-18 20:31:43.496 Restaurants[12428:207] *** NSInvocation: warning: object 0x3b2b2a0 of class '_NSZombie_BeltToolbarController' does not implement doesNotRecognizeSelector: -- abort
  </code></pre>
  
  <p>What I can't understand is why the system is trying to message this controller even though it has been deallocated and is there a way to tell the system that the controller doesn't exist any longer.</p>
  
  <p>[UPDATE]:
  I have put together a sample project replicating the bug: <a href="http://www.bytesizecreations.com/project/ControllerSwitch.zip" rel="nofollow noreferrer">download</a></p>
  
  <p>Load up the app and then change the Simulator's orientation a few times from Landscape to Portrait and it should occur. I have tried the same piece of code on a physical phone and it behaves in exactly the same way, so this is not a simulator related issue.</p>
  
  <p>[UPDATE]:
  I have used up one of my support requests with Apple's technical team to see if they can help me get to the bottom of this. Will post the solution - if they have one - here. Thanks for the help so far.</p>