Просмотр контроллера, отправляющего сообщение, даже если оно было освобождено

Я не уверен, что что-то изменилось в iPhone SDK 3.0, но я получаю странную ошибку. У меня есть иерархия контроллеров представления, где я переключаюсь между контроллерами представления в зависимости от ориентации интерфейса. Из того, что я могу сказать, ошибка вызывается всякий раз, когда я поворачиваю интерфейс, контроллеру представления, который был освобожден, отправляется сообщение shouldAutorotateToInterfaceOrientation. Это обратный след для ошибки:

#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

Ошибка, которая выводится на консоль отладки с помощью NSZombieEnabled:

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

Я не могу понять, почему система пытается отправить сообщение этому контроллеру, даже если он был освобожден, и есть ли способ сообщить системе, что контроллер больше не существует.

[ОБНОВЛЕНИЕ]: Я собрал пример проекта, повторяющего ошибку:скачать

Загрузите приложение, а затем измените ориентацию симулятора несколько раз с альбомной на портретную, и это должно произойти. Я пробовал тот же кусок кода на физическом телефоне, и он ведет себя точно так же, так что это не проблема, связанная с симулятором.

[ОБНОВЛЕНИЕ]: Я использовал один из моих запросов в службу технической поддержки Apple, чтобы узнать, могут ли они помочь мне разобраться в этом. Опубликуем решение - если они есть - здесь. Спасибо за помощь.

Ответы на вопрос(9)

Ваш ответ на вопрос