对 ParentViewController 的开始/结束外观转换的不平衡调用
Posted
技术标签:
【中文标题】对 ParentViewController 的开始/结束外观转换的不平衡调用【英文标题】:Unbalanced calls to begin/end appearance transitions for ParentViewController 【发布时间】:2014-11-15 22:37:21 【问题描述】:在ParentViewController
,我有
[some_vc dismissViewControllerAnimated:YES completion:nil];
ViewController *vc = [[ViewController alloc] initWithNibName:nil bundle:nil];
vc.someData = data;
[self.navigationController pushViewController:vc animated:NO];
我在日志中收到以下消息
开始/结束外观转换的不平衡调用 父视图控制器:0x7ff118750d50。
如果我将“否”改为“是”
[self.navigationController pushViewController:vc animated:YES];
我没有看到消息。
可能是什么问题。请帮我解决这个问题。
【问题讨论】:
如果在上一个事务(动画)正在进行时推送带有动画选项的新视图控制器,则会出现此问题。在推送视图控制器之前,您需要确保先前的事务已完成。 @rmaddy 回答了另一种实现方式的方法之一是将下一笔交易延迟几秒钟。 【参考方案1】:这是完成处理程序的用途。试试这个:
[some_vc dismissViewControllerAnimated:YES completion:^
ViewController *vc = [[ViewController alloc] initWithNibName:nil bundle:nil];
vc.someData = data;
[self.navigationController pushViewController:vc animated:NO];
];
这可确保在前一个控制器完成关闭之前不会显示新控制器。
另一种选择是颠倒顺序:
ViewController *vc = [[ViewController alloc] initWithNibName:nil bundle:nil];
vc.someData = data;
[self.navigationController pushViewController:vc animated:NO];
[some_vc dismissViewControllerAnimated:YES completion:nil];
这会推动新的控制器,然后关闭模式。这样做的好处是新的模式在模式被解除时可见。
【讨论】:
再次非常感谢您。对于您提到的优势,“另一种选择”对我有用。谢谢【参考方案2】:在UITabBarController 中忘记调用viewWillAppear 的super。所以UITabBarController的过渡动画没有完成。
这导致了“开始/结束出现的不平衡呼叫”!
【讨论】:
【参考方案3】:你需要添加 loadView。
[self.navigationController pushViewController:secondViewController animated:NO];
[self.navigationController loadView];
【讨论】:
以上是关于对 ParentViewController 的开始/结束外观转换的不平衡调用的主要内容,如果未能解决你的问题,请参考以下文章
关闭 Popover 并重新加载 parentViewController
自动将事件从 ChildViewController 传递到 parentViewController
如何从子视图访问 ParentViewController 方法?
UIViewController 没有带有 UIModalPresentationFormSheet 的 parentViewController?