Сбой popToRootViewController - PullRequest
       9

Сбой popToRootViewController

2 голосов
/ 15 февраля 2010

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

У меня есть приложение для навигации, которое выполняет детализацию между представлениями таблицы, вызывая pushViewController для объекта navigationController

У меня есть один конкретный раздел, который последовательно продвигает новые контроллеры представления, когда пользователь проходит через интерфейс. Все контроллеры представления разделены на подклассы из UIViewController.

Все работает нормально, пока не дойдет до конца, где идея состоит в том, что пользователь нажимает кнопку «Готово» и возвращается к корневому контроллеру представления (главное меню).

Так по нажатию кнопки я звоню:

[[self navigationController] popToRootViewControllerAnimated:YES];

И он падает.

Я немного обеспокоен, что это может быть большой проблемой, поскольку это определенно сработало в какой-то момент , но теперь оно всегда дает сбой.

Может кто-нибудь дать какие-нибудь идеи / советы?

Ответы [ 3 ]

4 голосов
/ 15 февраля 2010

Некоторые предложения:

  • Перед вызовом popToRootViewControllerAnimated: убедитесь, что RootViewController действительно существует. Если он умер где-то вдоль линии, вызов метода вызовет сбой.
  • Проверьте методы – viewWillDisappear: и – viewDidDisappear: вашего последнего просмотра, чтобы убедиться, что вы не делаете там что-то опасное.
  • Не уверен, что при выталкивании вида он всегда освобождается, но проверьте метод dealloc для представлений и их контроллеров, чтобы убедиться, что вы не перевыпускаете что-либо.
  • Одна ошибка, которую я часто видел, это освобождение объектов в модели данных из контроллеров. Когда другой контроллер (в данном случае RootViewController) пытается получить доступ к модели данных, происходит сбой приложения.

Похоже, вам нужно, как использовать отладчик Xcode. Введите отладчик в Xcode, чтобы получить указатели.

1 голос
/ 30 января 2013

Вы не должны использовать popToRootViewController в вашем представлении исчезать. Вместо этого, если вы хотите получить доступ к корневому контроллеру при нажатии кнопки «Назад», вы должны заменить кнопку «Назад» своей собственной и добавить к ней действие. Попробуйте сделать что-то вроде ::

UIBarButtonItem *back = [[UIBarButtonItem alloc] initWithTitle:@"back"
                                                               style:UIBarButtonItemStyleBordered
                                                              target:self
                                                              action:@selector(goBack:)]; 
self.navigationItem.leftBarButtonItem = back;

, а затем обработать действие как ::

- (void) goBack:(id)sender
{
    // pop to root view controller
    [self.navigationController popToRootViewControllerAnimated:YES];

}
0 голосов
/ 15 февраля 2010

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

Наиболее распространенный тип сбоя - использование освобожденного объекта (EXEC_BAD_ACCESS). Вы запускаете статический анализатор? Вы правильно сохраняете ссылки на свои объекты?

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