对<FirstViewController:0x2a2c00>的开始/结束外观转换的非平衡调用

C.J*_*hns 91 iphone transition ios

当我模拟我的应用程序时出现此问题,它不是错误或警告但它出现在我的控制台中,有没有人曾经遇到过这个问题?

chi*_*228 48

在我的情况下,当您非常快速地单击tableview中的两个选项卡时,会发生此错误.

结果导致错误的titlename,后退按钮消失.有人提到当你推视图时,set animated:NO.错误将消失但仍会导致一些奇怪的行为.它会推送两个视图,然后您需要返回两次才能返回tableview屏幕.

我试过的方法来解决这个问题:

BOOL cellSelected;

viewWillAppear cellSelected = YES;

在didselectcell代表中 if (cellSelected){cellSelected = NO; do action ; }

这有助于防止快速单击两个不同的单元格.

  • 我的猜测是一些措辞很难理解.我做了一些编辑以提高可读性. (5认同)

ttt*_*sss 42

在我的情况下,它发生在我[self performSegueWithIdentifier:@"SomeIdentifier" sender:self];在一个UINavigationController项目的viewDidLoad方法中触发 .

将其移入viewDidAppear方法解决了问题.

很可能的原因是,viewDidLoad并非所有花哨的动画都已经完成,而在viewDidAppear一切都已完成.


小智 21

我也有这个问题.我找到了两个解决这个问题的方法:

  1. 您可以在上面看到此解决方案.
  2. 我找到了UINavigationController这个问题解决的子类.缓冲导航控制器


小智 15

您应该在不同的循环中运行代码以避免这种情况

 double delayInSeconds = 0.1;
        dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
        dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
            // Put your code here
[self presentViewController:self.yourModalVC animated:YES completion:nil];
        });
Run Code Online (Sandbox Code Playgroud)

  • 更好的想法是将呈现动画包含在主队列上的`dispatch_async`中.关于`dispatch_async`的事情是它等待主队列上的所有其他动画完成.它比使用延迟要好得多,因为:1-你永远不知道延迟是否足够,这取决于你的主机设备2-你最终会过度延迟,有些事情会滞后.试试这个:`dispatch_async(dispatch_get_main_queue(),^ {[self presentViewController:self.yourModalVC animated:YES completion:nil];});` (6认同)

kun*_*alg 12

我在同一个问题上遇到了很多问题.我通过这种方式解决了这个问题

1)您没有使用UIViewController's指定的初始化程序initWithNibName:bundle:.尝试使用它而不仅仅是init.

2)设置animated:YES为NO,即解决了问题.例如.[self.navigationController pushViewController: viewController_Obj animated:NO];


小智 7

我使用导航控制器和推动其他控制器有同样的问题.我尝试使用缓冲导航控制器和其他几种方法,但它对我不起作用.花了一些时间搞清楚后,我注意到如果你试图在前一个事务(动画)正在进行时推动新的视图控制器(我估计持续约0.5秒)会出现这个问题.无论如何,我通过委派导航控制器并等待以前的动画完成快速解决了问题.


Nik*_*kov 7

确保你不要忘记in -viewWillAppear,-viewDidAppear,-viewDidLoad,-viewWillDisappear,-viewDidDisappear在你的方法重载中调用正确的super方法.例如,在我的情况下,我不匹配方法名称,如下所示:

-(void)viewDidAppear
{
 [super viewDidDisappear];
 //some code staff
 ..
}
Run Code Online (Sandbox Code Playgroud)

注意出现消失方法不匹配


inf*_*oop 5

'开始/结束外观过渡的不平衡调用'

说动画在最后一个相关动画未完成之前开始。那么,在推送新的视图控制器之前,您是否弹出任何视图控制器?或者可能会弹出到 root ?如果是,请尝试在没有动画的情况下这样做[self.navigationController popToRootViewControllerAnimated:NO];

看看这是否解决了问题,在我的情况下,这解决了问题。