继续获得“对<viewcontroller>开始/结束外观转换的不平衡调用”错误</viewcontroller>

时间:2014-01-04 10:16:12

标签: ios objective-c uiviewcontroller uinavigationcontroller segue

我的应用几乎完美运行。以下是我的应用程序的结构:

故事板上共有6个视图控制器。前3个视图控制器是最重要的。初始视图控制器具有“登录”和“注册”按钮。 “登录”按钮以模态方式显示登录视图控制器,“注册”按钮以模态方式显示注册视图控制器。

注册视图控制器有3个用户名,密码和电子邮件字段,然后是“提交”按钮。提交按钮将数据提交给我的Web服务器,如果所有内容都成功提交,则会调用“performSegueWithIdentifier”方法。

以下是声明:

[self performSegueWithIdentifier:@"superSegue" sender:self];

我今晚花了2个小时试图让上面的方法调用工作,它最终确实有效。为了让它工作,我不得不在故事板上选择我的注册视图控制器并转到编辑器&gt;嵌入&gt;导航控制器(如果我没记错的话,我必须这样做,因为注册视图控制器是以模态方式呈现的)。然后我从我的注册视图控制器的提交按钮拖动到我想要推送到的View Controller,然后选择Push,然后输入标识符名称。

无论如何,以上所有的工作都完美无缺,直到我尝试使用我们推送到使用方法调用的View Controller上的后退按钮。如果我点击后退按钮,它会转到90%的黑色屏幕,顶部有一个空白导航栏,后面有一个按钮,当然后面的按钮也没有任何效果。

这是我在控制台中收到的错误:

Unbalanced calls to begin/end appearance transitions for <VerificationViewController: 0x14ed1bb0>

Verification View Controller是Signup View Controller通过performSegueWithIdentifier方法推送的View Controller。

有谁知道如何修复此错误?

我在下面列出了我的故事板在xcode中的样子。有一个视图控制器,我已编码但尚未连接,不应该有任何区别,所以你可以忽略登录VC右侧的视图控制器。

enter image description here

6 个答案:

答案 0 :(得分:12)

今天早上我在另一个stackoverflow问题中找到了答案。答案可以找到here

当我最初设置Push Segue时,我点击并从按钮拖动,并且还在该按钮的IBAction方法实现中调用performSegueWIthIdentifier方法。这导致在按钮按下时执行2个相同的推动段。我刚刚把我的方法调用留在了IBAction中,删除了旧的push segue,并且只是这次我点击并拖动整个View Controller而不是它的按钮来创建一个新的push segue。

答案 1 :(得分:9)

我通过包装来解决这个问题。

void image_init(struct image* img, int w, int h) {
    img = malloc(sizeof(struct image));
    (*img).w = w;
    (*img).h = h;
}

答案 2 :(得分:3)

在我的情况下,它是UITabBarController的子类,带有重载的setSelectedIndex:方法,可以使用动画进行转换。 我发现在动画开始之前需要调用以下内容:

[sourceVC viewWillDisappear:YES];
[destinationVC viewWillAppear:YES];

以下是完成块:

if (finished) {
    [sourceVC viewDidDisappear:YES];
    [destinationVC viewDidAppear:YES];
    [super setSelectedIndex:selectedIndex];
}

如果在动画结束前发生多个selectedIndex更改,则可能仍会出现此问题。

答案 3 :(得分:1)

在我的情况下,这个警告是由显示模态视图时调用UINavigationController的popToRootViewController引起的。 当模态视图被解除后我移动popToRootViewController时,警告停止显示。

答案 4 :(得分:1)

错误原因:如果从当前View Controller的viewWillAppear,loadView,init或viewDidLoad方法推送/显示另一个View控制器,则会显示此消息

解决方案:将您的推送/呈现代码移至viewDidAppear方法将解决问题

原因是:在viewDidLoad中,并非所有花哨的动画都已经完成,而在viewDidAppear中,一切都已完成。

答案 5 :(得分:1)

我工作过,这对我有好处 错误原因:如果从TabBarController推送/显示另一个View控制器,则会显示此消息, 解决方案:请设置viewController.modalPresentationStyle = .overCurrentContext,然后显示viewController topViewController.present(vc, animated: true, completion: nil)