我只是想知道當我彈出我的UINavigationController時遇到的錯誤。無論我目前在哪個UIViewController中,我都實現了一個註銷控制器,它會彈出回到我的UINavigationController中的根控制器。這裏列出了主要的代碼。UINavigation控制器陣列錯誤
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)
然而,當我在上面的代碼更改爲:
Root Controller: DetailViewController
Root Controller: DetailViewController
它困擾着我,而爲什麼當我突然出現:
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]);
在控制檯中的結果顯示UINavigationController的DetailViewController它沒有觸發ViewWillAppear方法來更新我的登錄信息。在我看來,當我彈出0索引時,它正在訪問一個超出限制的數組對象,但是當我彈出索引1時,這就是當前根控制器所在的位置。有誰知道這是什麼原因?
只是建議,要彈出一個導航堆棧,直到它的根視圖控制器有一個更簡單的方法[UINavigationController popToRootViewController]。 – 2011-05-16 19:08:42