В моем приложении есть представление, которое отображает 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]
Если кто-то видел это раньше или имеет какие-либо предположения о том, что может происходить или как отладить это, я был бы очень признателен.