Изменение navigationController.delegate приводит к плохому доступу - PullRequest
6 голосов
/ 05 ноября 2011

Это может звучать как вопрос новичка, однако я новичок в разработке для iOS.

Я запустил представление в navigationController, скажем, это 3-е нажатие.В этом представлении я установил self.navigationController.delegate = self;.Я изменил делегат, потому что мне нужно обработать случай, когда пользователь переходит к предыдущему виду, то есть всплывает из текущего вида.

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated
{
    if ([[viewController class] isEqual:[MainViewController class]]) {
        ...
    }
}

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

Так чего мне не хватает?Как правильно обрабатывать навигацию назад нажатием кнопки?

Ответы [ 2 ]

3 голосов
/ 05 ноября 2011

Это связано с тем, что навигационный контроллер отправляет сообщение выдвинутому и освобожденному контроллеру представления, вы должны устанавливать делегат каждый раз, когда вы делаете нажатие и выдвижение.Также добавьте self.navigationController.delegate = nil; в метод dealloc вашего viewController.

0 голосов
/ 03 ноября 2013

Поместите ниже в Viewcontroller, в котором вы назначаете self.navigationController.delegate = self

-(void) viewWillDisappear:(BOOL) animated
{  
   [super viewWillDisappear:animated];
   if ([self isMovingFromParentViewController])
   {
      if (self.navigationController.delegate == self)
      {
           self.navigationController.delegate = nil;
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...