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

Objective c 开始/结束外观转换的调用不平衡,objective-c,uiview,uinavigationcontroller,Objective C,Uiview,Uinavigationcontroller,我目前正在努力解决这个错误:/I我已经尝试了其他SO线程关于这个主题的解决方案,但到目前为止没有运气 问题是: 我有一个UINavigationController,可以按视图a,从视图a我可以按一个按钮来按视图B-工作正常。但当我按下视图B,然后将屏幕旋转到横向模式,然后单击后退按钮时,我在控制台中得到以下输出,视图切换没有动画,只是从B切换回A: 2012-01-02 20:50:42.866 [13345:f803] Unbalanced calls to begin/end appear

我目前正在努力解决这个错误:/I我已经尝试了其他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>
-viewdid视图B的加载:

- (void) showConverter:(id)sender {
    [self.navigationController pushViewController:converter animated:YES];
}
- (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];
 }
- (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];
}
-视图B的视图卸载:

- (void) showConverter:(id)sender {
    [self.navigationController pushViewController:converter animated:YES];
}
- (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];
 }
- (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];
}
如果您有问题或需要更多的代码示例,请让我知道


提前感谢您的帮助:-)

结果表明,在我的情况下,问题的根本原因是,我忘记更新不同视图控制器中的所有
shouldAutorotateToInterfaceOrientation:
方法,以便对所有
UIInterfaceOrientations
返回YES(或者说它们都应该返回sam)。这样做解决了问题。

检查您的
视图将显示:动画:
视图显示:动画:
视图将消失:动画:
,和
视图消失:动画:
方法。这两种方法在VCs中都没有实现。这些方法应该在所有被推入堆栈的视图控制器中实现吗?您不必实现它们。如果你这样做了,你必须在它们中调用
super
。最终解决了这个问题,看起来这个问题可能有许多不同的原因,但感谢你的帮助!我也有同样的奇怪,这个答案救了我。好啊!这个问题似乎只发生在iOS 5上的in-scape中。这个应用程序在iOS 4上运行了好几年。似乎只有在Xcode 4中构建时才会发生这种情况。直到最近,我们才使用Xcode 3构建,这一点从未出现过。天才!!!我遇到了同样的问题:在两个视图控制器中,我都需要返回相同的内容:
返回UIInterfaceOrientationIsLandscape(interfaceOrientation),它也解决了我的问题。谢谢-帮了你很多。天哪!很难弄明白这一点!这也帮我解决了我的问题!iOS6和XCode 4.6。