导航控制器在关闭视图控制器时崩溃

时间:2014-06-21 16:16:57

标签: ios objective-c xcode uinavigationcontroller autorotate

在我的应用中发生解雇时,我收到2个错误。
Warning: Attempt to dismiss from view controller <MyNavigationController> while a presentation or dismiss is in progress!
&安培;
Unbalanced calls to begin/end appearance transitions for <MainViewController>.

我在周围和周围搜索说,通常会发生冲突解雇,其中一个按钮以编程方式和通过故事板调用转换。但是,在使用导航控制器附带的常规后退按钮时,我收到了这些错误。我根本不对按钮做任何事情。

我唯一可以链接到错误的是我的导航控制器在尝试关闭视图控制器时自动旋转。如果我删除自动旋转或将两个视图控制器的方向设置为相同,那么我就不会收到错误。问题是,我需要一个视图控制器是纵向的,另一个是景观...

这是我设置方向的方式

NavController.m:

- (NSUInteger)supportedInterfaceOrientations {
    return self.topViewController.supportedInterfaceOrientations;
}

- (BOOL)shouldAutorotate {
    return YES;
}

MainViewController.m:

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
}

OtherViewController.m:

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskLandscapeRight;
}

我注意到,由于某些原因,它在转到我的&#34; OtherViewController&#34;时并没有自动旋转,但它显然在尝试自动旋转时返回到#34; MainViewController&#34因此导致崩溃。

由于它可能是相关的,这就是我加载我的OtherViewController的方式:

[self performSegueWithIdentifier:titles[indexPath.row] sender:nil];

我有一个CollectionViewController,它调用我在故事板中设置的push segue。标题是连接到MainViewController的不同segue标题的NSArray。

以下是我的应用中发生的事情:

MainViewController  : LoadView
MainViewController  : ViewWillAppear
MainViewController  : ViewDidAppear
//This is where I choose to load the OtherViewController
OtherViewController : LoadView
MainViewController  : ViewWillDisappear
OtherViewController : ViewWillAppear
MainViewController  : ViewDidDisappear
OtherViewController : ViewDidAppear
//This is where I select the "Back" button
Warning: Attempt to dismiss from view controller NavController while a presentation or dismiss is in progress!
Unbalanced calls to begin/end appearance transitions for MainViewController.
MainViewController  : ViewWillDisappear
MainViewController  : ViewDidDisappear

2 个答案:

答案 0 :(得分:0)

对于详细分析,我们需要更多代码,尤其是在视图控制器被解除的情况下。

对于您的错误消息,在您显示或解除视图控制器的其他工作流程的中间调用解雇调用(无论您使用哪个)。这可能是当您出现或解除模态视图控制器时,或者当您在导航堆栈中推送或弹出一个

  • 的loadView
  • viewDidLoad中
  • viewWillAppear中
  • viewDidAppear
  • viewWillDisappear
  • viewDidDisappear

此列表当然不完整,但应该是在流程中调用的最常用方法。

与我们分享更多代码。

答案 1 :(得分:0)

如果没有太多细节,你需要找到一种方法在之后做另一个。棘手的部分是没有代表告诉你何时view在segue之后被解雇。但是,在segue之后,当调用viewWillAppear时,先前的view被解雇。 也许尝试从代码中旋转view,并在viewWillAppear

中执行此操作