У меня есть два контроллера вида: MyParentViewController
и MyChildViewController
.Почему ротация iPhone вызывает сбой при отправке сообщения _existingView на освобожденный объект?
Приложение начинается с MyParent
. Я толкаю контроллер MyChild
к началу навигации стека, так что цепь следующим образом:
MyParent
>MyChild
входе идентификатор объекта MyChild
с NSLog(@"%p", self)
:
2009-11-20 05:08:29.305 MyApp[2213:207] MyChildViewController instance: 0x36afc20
When Я нажимаю кнопку «Назад» от MyChild
, это выталкивает MyChild
со стека и возвращает меня в MyParent
.
Когда я повернуть iPhone во время просмотра MyParent
, мои приложения рушится с сообщением об ошибке:
2009-11-20 05:08:37.671 MyApp[2213:207] *** -[MyChildViewController _existingView]: message sent to deallocated instance 0x36afc20
У меня нет _existingView
метода или переменной экземпляра в MyChildViewController
.
Если я вытащил MyChild
со стека, я думаю, что контроллер навигации выпустит его, и я полагаю, что он будет установлен в nil
и что любые отправленные сообщения будут игнорироваться. Очевидно, это не происходит здесь.
Есть ли у кого-нибудь идеи, почему мое приложение вылетает при вращении?
Есть ли способ узнать, что отправляет сообщение _existingView
на номер MyChild
?
EDIT
Вот код для толкания MyChild
на стек:
MyChildViewController *_myChildViewController = [[MyChildViewController alloc] initWithNibName:@"MyChildViewController" bundle:nil];
_myChildViewController.managedObjectContext = self.managedObjectContext;
_myChildViewController.title = [_xyz name];
[self.navigationController pushViewController:_myChildViewController animated:YES];
UIBarButtonItem *_backButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"MyChildViewBackBarButtonItemTitle", @"") style:UIBarButtonItemStyleDone target:nil action:nil];
self.navigationItem.backBarButtonItem = _backButton;
[_backButton release];
[_myChildViewController release];
EDIT 2
Я думаю я, возможно, решили эту проблему. У меня есть UISearchDisplayController
, добавленный в контроллер контроллера просмотра через Interface Builder.
Первоначально, я поставил это nil
, когда контроллер MyChild
отправляется -viewDidUnload
, думая, что это обычно достаточно, чтобы установить IBOutlet
экземпляров к нулю в этом методе. Но этого, похоже, недостаточно для моего контроллера отображения поиска. Когда я отпущу это в -dealloc
, я не получаю авария. Это ошибка, интересно или ожидаемое поведение?
Что именно выглядит код при нажатии childViewController? Является ли childViewController полем класса parentViewController? –