开始/结束外观转换的不平衡调用

Posted

技术标签:

【中文标题】开始/结束外观转换的不平衡调用【英文标题】:Unbalanced calls to begin/end appearance transitions 【发布时间】:2012-01-02 20:05:16 【问题描述】:

我目前正在努力解决这个错误:/我已经尝试过其他 SO 线程关于这个主题的解决方案,但到目前为止还没有运气。

这是错误的: 我有一个 UINavigationController 推送视图 A,从视图 A 我可以按下按钮来推送视图 B - 工作正常。但是当我按下视图 B,然后将屏幕旋转到横向模式,然后单击后退按钮时,我在控制台中得到以下输出并且视图切换没有动画,只是从 B 切换回 A:

2012-01-02 20:50:42.866 [13345:f803] Unbalanced calls to begin/end appearance transitions for <DimensionConversionViewController: 0x68831f0>.
2012-01-02 20:50:42.868 [13345:f803] attempt to dismiss modal view controller whose view does not currently appear. self = <UINavigationController: 0x6b541a0> modalViewController = <UISnapshotModalViewController: 0x6da5190>

这就是我将视图 B 推入堆栈的方式:

- (void) showConverter:(id)sender 
    [self.navigationController pushViewController:converter animated:YES];

-viewB 的viewDidLoad:

- (void) viewDidLoad 
        [super viewDidLoad];
        // Do any additional setup after loading the view from its nib.
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateInterface) name:@"UIDeviceOrientationDidChangeNotification" object:nil];
        // ... Update text fields ...
        [self updateInterface];
 

-viewB 的viewDidUnload:

- (void)viewDidUnload

    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
    [[NSNotificationCenter defaultCenter] removeObserver:self name:@"UIDeviceOrientationDidChangeNotification" object:nil];

如果您有任何问题或需要更多代码示例,请告诉我。

在此先感谢您的帮助 :-)

【问题讨论】:

检查您的 viewWillAppear:animated:viewDidAppear:animated:viewWillDisappear:animated:viewDidDisappear:animated: 方法。 这两个VC都没有实现这些方法。这些方法是否应该在所有被推入堆栈的视图控制器中实现? 您不必实现它们。如果这样做,则必须在其中致电super 终于解决了这个问题,看来这个问题可能有很多不同的原因,但感谢您的帮助! 【参考方案1】:

事实证明,就我而言,问题的根本原因是,我忘记更新不同视图控制器中的所有 shouldAutorotateToInterfaceOrientation: 方法以对所有 UIInterfaceOrientations 返回 YES(或者假设它们都应该返回山姆)。这样做解决了这个问题。

【讨论】:

我也有类似的怪癖,这个答案救了我。对哦!这个问题似乎只发生在 ios 5 的横向环境中。这个应用程序在 iOS 4 中已经运行了好几年了。它似乎也只在 Xcode 4 中构建时发生。直到最近我们使用 Xcode 3 构建,但从未出现过。 天才!!!我遇到了同样的问题:在两个视图控制器中,我需要返回相同的内容:return UIInterfaceOrientationIsLandscape(interfaceOrientation);,它也解决了我的问题。 谢谢 - 帮助比你知道的更多。 天哪!很难弄清楚这一点!这也帮助我解决了我的问题! iOS6 和 XCode 4.6。

以上是关于开始/结束外观转换的不平衡调用的主要内容,如果未能解决你的问题,请参考以下文章

开始/结束外观转换的不平衡调用...- UIViewController 包含

UISplitViewController 中对开始/结束外观转换的不平衡调用

开始/结束外观转换的不平衡调用

<UINavigationController: *****> 开始/结束外观转换的不平衡调用

警告:对 QLRemotePreviewContentController 的开始/结束外观转换的不平衡调用

全屏 Youtube 视频后开始/结束外观转换的不平衡调用