У меня есть родительский контроллер табличного представления со свойством контроллера подробного представления только для чтения, который лениво создает контроллер подробного представления. Если я нахожусь на iphone / ipod, я настраиваю и выдвигаю контроллер подробного представления, когда элемент в таблице выбран. Когда подробный вид виден, и я дважды щелкаю обратно в навигационном контроллере, детальный контроллер затем выталкивается из родительского контроллера, и вызывается родительский dealloc. Когда родительский колокольчик достигает линии, где я вызываю [detailViewController release], я получаю аварийное завершение с EXC_BAD_ACCESS от контроллера навигации. Это заставляет меня думать, что моя проблема с управлением памятью detailViewController, но отладка с NSZombies не показывает проблем. (Комментирование строки [detailViewController release] устраняет сбои, но тогда у меня никогда не было выпусков, чтобы уравновесить alloc - памяти утечек detailViewController) Есть идеи, почему я получаю этот сбой?
EDIT:
Вот трассировка стека для аварии:
Program received signal: “EXC_BAD_ACCESS”.
(gdb) bt
#0 0x01046a63 in objc_msgSend ()
#1 0x0a9d72a0 in ?? ()
#2 0x0000cb4c in -[MyTableViewController dealloc] (self=0xa956840, _cmd=0x127a9d6) at /Users/nick/Documents/MyApp/Classes/MyTableViewController.m:290
#3 0x00390f1d in -[UINavigationController setDisappearingViewController:] ()
#4 0x0038e4f6 in -[UINavigationController _clearLastOperation] ()
#5 0x0038ee3f in -[UINavigationController navigationTransitionView:didEndTransition:fromView:toView:] ()
#6 0x0051be23 in -[UINavigationTransitionView _notifyDelegateTransitionDidStopWithContext:] ()
#7 0x0051cfd2 in -[UINavigationTransitionView _cleanupTransition] ()
#8 0x00308665 in -[UIViewAnimationState sendDelegateAnimationDidStop:finished:] ()
#9 0x003084f7 in -[UIViewAnimationState animationDidStop:finished:] ()
#10 0x0200c6cb in run_animation_callbacks ()
#11 0x0200c589 in CA::timer_callback ()
#12 0x01225fe3 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ ()
#13 0x01227594 in __CFRunLoopDoTimer ()
#14 0x01183cc9 in __CFRunLoopRun ()
#15 0x01183240 in CFRunLoopRunSpecific ()
#16 0x01183161 in CFRunLoopRunInMode ()
#17 0x01a5a268 in GSEventRunModal ()
#18 0x01a5a32d in GSEventRun ()
#19 0x002e642e in UIApplicationMain ()
#20 0x00001b28 in main (argc=1, argv=0xbffff070) at /Users/nick/Documents/MyApp/main.m:14
EDIT2:
Метод dealloc, где происходит сбой:
- (void)dealloc
{
[context release]; // a managed object context -- when table entries are selected, they get cached in core data
[tableDataArray release];
[detailViewController release]; // <-- line 290, this is where it crashes
[super dealloc];
}