Objective c 开始/结束外观转换的调用不平衡
我目前正在努力解决这个错误:/I我已经尝试了其他SO线程关于这个主题的解决方案,但到目前为止没有运气 问题是: 我有一个UINavigationController,可以按视图a,从视图a我可以按一个按钮来按视图B-工作正常。但当我按下视图B,然后将屏幕旋转到横向模式,然后单击后退按钮时,我在控制台中得到以下输出,视图切换没有动画,只是从B切换回A: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
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。