UIViewController -dealloc, вызываемый после увольнения модального контроллера вида - PullRequest
2 голосов
/ 12 января 2011

В моем приложении есть представление, которое отображает UITableView. Это представление создается в файле пера и имеет собственный контроллер представления. Подкласс UIViewController для этого представления действует как источник данных и делегат для UITableView.

Мой UITableView отображает несколько строк на основе моих данных. Затем в последней строке отображается другой текст: «Добавить еще один ...». Если выбрана последняя строка, я представляю модальный контроллер вида (чтобы позволить пользователю добавлять больше данных). Когда я отклоняю модальный контроллер вида, я снова вижу исходный вид (как и ожидалось), и все выглядит хорошо. Однако, когда я пытаюсь взаимодействовать с этим представлением, приложение вылетает.

Из размещения нескольких операторов NSLog () через UIViewController (для UITableView) я определил, что метод -dealloc вызывается сразу после закрытия модального представления. Это объясняет сбой, когда я пытаюсь что-то сделать с этим видом. Однако я понятия не имею, почему -dealloc вызывается на этом контроллере представления.

Чтобы закрыть модальный контроллер вида, у меня есть:

[self dismissModalViewController:YES];

Как код в методе IBAction в UIViewController контроллера модального представления. Это действие связано с кнопкой отмены в соответствующем файле пера.

Кроме того, мое понимание из Руководства по программированию View Control состоит в том, что нормально удалять модальный контроллер изнутри себя, но более надежно использовать делегатов. Сначала я использовал делегата, но взял делегата для упрощения отладки. Я просто помещаю делегат обратно, чтобы перепроверить, и то же самое происходит при использовании делегатов. Вызовы метода действия модального контроллера реализованы так:

[[self delegate] myModalViewController:self didAddObject:obj];  

Реализация делегата в родительском контроллере представления:

[self dismissModalViewController:YES]

Если кто-то видел это раньше или имеет какие-либо предположения о том, что может происходить или как отладить это, я был бы очень признателен.

Ответы [ 2 ]

6 голосов
/ 13 января 2011

Если вызывается -dealloc, что-то освобождает контроллер представления.Попробуйте реализовать -release в вашем контроллере представления:

-(void)release {
    NSLog(@"view controller released");
    [super release];
}

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

3 голосов
/ 12 января 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...