Ios 导航控制器在关闭视图控制器时崩溃
当我的应用程序中发生解雇时,我收到2个错误Ios 导航控制器在关闭视图控制器时崩溃,ios,objective-c,xcode,uinavigationcontroller,autorotate,Ios,Objective C,Xcode,Uinavigationcontroller,Autorotate,当我的应用程序中发生解雇时,我收到2个错误 警告:在演示或解除过程中,尝试从视图控制器解除 & 开始/结束外观转换的调用不平衡。 我到处搜索,到处都说通常会发生冲突,按钮通过编程和故事板调用转换。一、 但是,当使用导航控制器随附的正常后退按钮时,我收到这些错误。我根本不动按钮 我唯一能链接到错误的是,我的导航控制器在试图关闭视图控制器时自动旋转。如果删除“自动旋转”或将两个视图控制器的方向设置为相同,则不会出现错误。问题是,我需要一个视图控制器是纵向的,另一个是横向的 这就是我设置方向的方式 N
警告:在演示或解除过程中,尝试从视图控制器解除代码>
&
开始/结束外观转换的调用不平衡。
我到处搜索,到处都说通常会发生冲突,按钮通过编程和故事板调用转换。一、 但是,当使用导航控制器随附的正常后退按钮时,我收到这些错误。我根本不动按钮
我唯一能链接到错误的是,我的导航控制器在试图关闭视图控制器时自动旋转。如果删除“自动旋转”或将两个视图控制器的方向设置为相同,则不会出现错误。问题是,我需要一个视图控制器是纵向的,另一个是横向的
这就是我设置方向的方式
NavController.m:
- (NSUInteger)supportedInterfaceOrientations {
return self.topViewController.supportedInterfaceOrientations;
}
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscapeRight;
}
MainViewController.m:
- (NSUInteger)supportedInterfaceOrientations {
return self.topViewController.supportedInterfaceOrientations;
}
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscapeRight;
}
OtherViewController.m:
- (NSUInteger)supportedInterfaceOrientations {
return self.topViewController.supportedInterfaceOrientations;
}
- (BOOL)shouldAutorotate {
return YES;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}
- (NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskLandscapeRight;
}
我注意到,由于某种原因,它在转到我的“OtherViewController”时不会自动旋转,但它显然会在返回“MainViewController”时尝试自动旋转,从而导致崩溃
因为它可能是相关的,所以以下是我加载OtherViewController的方式:
[self performSegueWithIdentifier:titles[indexPath.row] sender:nil];
我有一个CollectionViewController,它调用我在故事板中设置的推送序列。Titles是连接到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
对于详细的分析,我们需要更多的代码,尤其是在视图控制器被取消的情况下
关于您的错误消息,无论您使用哪种调用,都会在显示或删除视图控制器的其他工作流中间调用。这可能是在显示或关闭模式视图控制器时,或者在中的导航堆栈上推送或弹出一个模式视图控制器时
- 负荷视图
- viewDidLoad
- 视图将出现
- 视图显示
- 视图将消失
- 看不见
这个列表当然不完整,但这应该是流程中调用的最常见的方法
因此,请与我们分享更多代码 在不涉及太多细节的情况下,您需要找到一种方法一个接一个地进行。棘手的是,没有一个代理告诉您在一个segue之后,视图
何时被取消。但是,在一个序列之后,当调用视图时,上一个视图将被取消。
可能尝试从代码中旋转视图
,并在视图中将出现
?将此添加到代码中:NSLog(@“%@,[self.navigationController viewControllers]);然后告诉我它打印出了什么。(MyMain ViewController,OtherViewController)
应该存在的两个视图控制器都在那里。我对您建议的所有内容都添加了注释,似乎我在ViewDidEngage中的日志输出从未被记录。所以我的OtherViewController甚至没有被要求消失。。。VIEW将在我的主VIEW控制器上显示,并且不会调用LoadView,但我确实注意到一些奇怪的情况。收到这两个错误后,MainViewControllers调用ViewWillEnglishe和ViewDidEnglishe..与…没有什么奇怪的。。。而且…确实。。。比因打电话来。这是一个顺序的问题,你可以利用它。我唯一能够强制旋转的方法是通过调整一点来像什么一样工作,但所有这些都是在转到我的OtherViewController时使autorotate工作。当返回到我的MainViewController时,它仍然有相同的崩溃