Программирование iOS: приложение «super Dealloc» аварийно завершает работу

Первый раз задаю вопрос на этом сайте. как разработчик-любитель, я всегда находил ответы на свои вопросы на этом сайте, но не мог найти на свою текущую проблему.

В моем приложении для iPad я вызываю новый UIViewController из rootView:

DisplayTheMapViewController_iPad *root = [[DisplayTheMapViewController_iPad alloc] init];
displayTheMapViewController=root;
[[self navigationController] pushViewController:displayTheMapViewController animated:YES];
[root release];

Когда я возвращаюсь из этого представления в основное представление, приложение вылетает (это занимает минуту или около того, а до этого все нормально, но это всегда происходит), с ошибкой автоматического выпуска пула.

когда я комментирую [корневой выпуск], приложение остается в живых, но тогда у меня другая проблема: при моем втором посещении представления (не первом!), когда вызывается метод, который помещает всплывающее окно в представление, приложение падает и Я получаю следующую ошибку:

«Поповеры не могут быть представлены из представления, в котором нет окна».

Я должен сделать что-то не так. Заранее благодарю за любой совет.


person Jerubus    schedule 05.07.2011    source источник


Ответы (3)


Эта строка немного озадачивает:

displayTheMapViewController=root;

Я предполагаю, что displayTheMapViewController является переменной экземпляра? Если это так, вы назначаете ему root, но не сохраняете root. Когда этот контроллер выталкивается из стека навигации, контроллер навигации освобождает его, в результате чего он освобождается, потому что больше ничего его не сохранило. displayTheMapViewController будет указывать на недопустимый объект. Возможно, вы хотели сказать:

self.displayTheMapViewController=root;

Если displayTheMapViewController свойство настроено на сохранение своего содержимого, это предотвратит описанную выше проблему с оборванным указателем.

person Caleb    schedule 05.07.2011

Проверьте свой класс DisplayTheMapViewController_iPad сверху вниз, что вы забыли освободить выделенный объект.

person ipraba    schedule 05.07.2011

Вы не публикуете достаточно кода для полной диагностики проблемы, но я бы посоветовал проверить строку: displayTheMapViewController = root;. Поскольку вы не сохраняете root, displayTheMapViewController останется висеть после того, как контроллер представления будет удален из контроллера навигации.

Что касается того, что происходит, когда вы не отпускаете root и снова входите в представление, я подозреваю, что это связано с внутренними компонентами DisplayTheMapViewController_iPad, когда у вас есть второй экземпляр.

person sergio    schedule 05.07.2011