Мне просто интересно, с какой ошибкой я столкнулся, когда высовывал свой UINavigationController. Каким бы ни был UIViewController, в котором я сейчас нахожусь, я реализовал контроллер выхода из системы, который возвращается к корневому контроллеру в моем UINavigationController. Основной код, который делает это, указан здесь.
NSLog(@"Root Controller: %@", [[self.navigationController.viewController objectAtIndex:0] class]);
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
NSLog(@"Root Controller: %@", [[self.navigationController.viewController objectAtIndex:0] class]);
Это то, что отображает консоль.
Root Controller: DetailViewController
Root Controller: (null)
Однако, когда я изменяю вышеуказанный код на:
NSLog(@"Root Controller: %@", [[self.navigationController.viewController objectAtIndex:0] class]);
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
NSLog(@"Root Controller: %@", [[self.navigationController.viewController objectAtIndex:0] class]);
Результаты в консоли отображаются как:
Root Controller: DetailViewController
Root Controller: DetailViewController
Некоторое время меня беспокоило, почему, когда я подключил UINavigationController к DetailViewController, он не запустил метод ViewWillAppear для обновления информации для входа в систему. Мне кажется, что когда я открываю индекс 0, он обращается к объекту массива, который находится за пределами границ, но когда я перетаскиваю на индекс 1, именно там находится текущий корневой контроллер. Кто-нибудь знает, в чем причина?