更改navigationController.delegate会导致访问错误

时间:2011-11-05 08:08:09

标签: objective-c ios uinavigationcontroller

这可能听起来像一个新手问题,但我是iOS开发新手。

我在navigationController中推送了一个视图,假设它是第3个推送视图。 在该视图中,我设置了self.navigationController.delegate = self;。我已经更改了委托,因为我需要处理用户转到上一个视图的情况,即从当前视图弹出。

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

它工作正常,但当我弹出当前视图并再次按导航后退按钮(即切换到第一个推送视图)时,我的访问错误。

那么我缺少什么? 处理导航后退按钮的正确方法是什么?

2 个答案:

答案 0 :(得分:3)

这是因为导航控制器向弹出和取消分配的视图控制器发送消息,每次执行弹出和推送时都必须设置委托。还要将self.navigationController.delegate = nil;添加到viewController的dealloc方法。

答案 1 :(得分:0)

将下面放在您指定self.navigationController.delegate = self

的Viewcontroller中
-(void) viewWillDisappear:(BOOL) animated
{  
   [super viewWillDisappear:animated];
   if ([self isMovingFromParentViewController])
   {
      if (self.navigationController.delegate == self)
      {
           self.navigationController.delegate = nil;
      }
   }
}