如何消除“两阶段轮换”警告?

我的窗口的rootViewController是一个UINavigationController然后..在这个导航控制器的rootViewController中,我弹出一个模态视图(一个UITabBarController)

像这样的东西:

UIWindow ->UINavigationController -->MyFirstViewController<--In this class I run following code 
 [self.navigationController presentModalViewController:tabController animated:YES]; 

然后是调试器警告:当旋转多个视图控制器或视图控制器而不是窗口委托时,不支持使用两阶段旋转动画

但是,如果模态视图不是tabController,则不会出现此警告。

当我在导航控制器中弹出tabController模式视图时,这种行为会对应用程序造成什么伤害?

或者我应该找到另一种方法来做到这一点?

我在这个网站上发现了几个类似的问题,但我不明白……

原因是您在其预期用途之外使用UITabBarController。 它仅用作根控制器,如果您需要与tabbar使用工具栏类似的东西。 大约半年前我遇到了确切的问题。 不幸的是,如果你这样使用它,你也会遇到其他问题。

UITabBarController文档

由于UITabBarController类inheritance自UIViewController类,因此选项卡栏控制器具有可通过view属性访问的自己的视图。 部署选项卡栏界面时,必须将此视图安装为窗口的根目录。 与其他视图控制器不同,标签栏界面不应该作为另一个视图控制器的子项安装。

如果您只添加一个没有任何子控制器的空白UITabbarController,也会发生这种情况,如下所示:

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; //Tab bar controller UITabBarController* tabBarController = [[UITabBarController alloc] init]; [[self window] setRootViewController:tabBarController]; [self.window makeKeyAndVisible]; return YES; } 

如果在将UWabBarController声明为UIWindow的rootViewController之前将子视图控制器添加到UITabBarController,则警告将消失。

我在inheritanceUITabBarController但忘记在我自己的类中调用基类的viewWillAppear:方法时得到了相同的警告。

 - (void) viewWillAppear:(BOOL)animated { [super viewWillAppear:animated] // <--- adding this fixed the warning ... } 

我有一个应用程序,其中UITabBarController是根视图控制器。 根据应用内购买,子视图控制器是不同的。

在我的NIB中,我有没有任何子视图控制器的UITabBarController 。 我在application:didFinishLaunchingWithOptions:添加了子视图控制器application:didFinishLaunchingWithOptions:

这导致警告“两阶段”旋转出现。 一旦我将一个子视图控制器添加到NIB中的tabbar控制器,它就消失了。

@Maciej Swic的回答对我有所帮助。

在我的情况下,我已经有2个孩子为UITabBarController。

出于一些奇怪的原因,我只需要放

[self.window makeKeyAndVisible];

我加了两个孩子后。

Oliver的回答为我做了诀窍……虽然很有趣,但是直到我添加了一个viewWillAppear:动画方法到子类的tabviewcontroller之前我没有遇到任何问题……那时,一切都变得混乱,直到它是通过添加[super viewWillAppear:animated]语句来修复的,奥利弗建议……

有两级动画警告的问题,顺序如下:

 self.window.rootViewController = self.tabBarController; self.tabBarController.selectedIndex = 0; 

但是改变顺序可以帮助我消除警告。

 self.tabBarController.selectedIndex = 0; self.window.rootViewController = self.tabBarController; 

希望这可以帮助。