Ios 为什么我的UINavigationController从第二个视图控制器开始?

Ios 为什么我的UINavigationController从第二个视图控制器开始?,ios,objective-c,Ios,Objective C,以下是我得到的: - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ... //create two vc's..... APCMainViewController *mainViewController = [[APCMainViewController alloc] init]; APCVideosTab

以下是我得到的:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  ...

  //create two vc's.....
  APCMainViewController *mainViewController = [[APCMainViewController alloc] init];
  APCVideosTableViewController *videosViewController = [[APCVideosTableViewController alloc] init];

  //create the main nav controller....
  UINavigationController *mainNav = [[UINavigationController alloc] initWithRootViewController:mainViewController];
  mainNav.viewControllers = @[mainViewController, videosViewController];

  self.window.rootViewController = mainNav;

  ...
}

但应用程序总是以显示videosViewController开始,而不是以mainViewController开始。为什么?

请删除以下代码行

mainNav.viewControllers = @[mainViewController, videosViewController]; // Not required
您正在使用根视图控制器InviewController初始化导航视图控制器,该控制器是第一个显示的视图控制器。然后,无需再次将视图控制器添加到堆栈。

来自文档

当您设置根控制器时 根视图控制器位于数组中的索引0处,后视图控制器位于索引n-2处,顶部控制器位于索引n-1处,其中n是数组中的项数

将视图控制器的新数组指定给此属性相当于调用SetViewController:animated:方法,并将动画参数设置为NO

这意味着,您正在调用SetViewController;这在文档中显示:

要放置在堆栈中的视图控制器。此数组中控制器的前后顺序表示导航堆栈中控制器的新的从下到上顺序。因此,添加到数组的最后一项将成为导航堆栈的顶部项

这应该给你一个线索,为什么你的导航堆栈是颠倒的

应该如此

mainNav.viewControllers = @[videosViewController, mainViewController ];

我同意你的看法,阿尼尔。但是OP可能想在手之前指定导航堆栈?