我的应用包含一些UIViewControllers
。第一个是登录页面,第二个是"菜单页面"和第三个viewController
。
我在每个页面上的按钮上放置了一个注销功能,其中包含一个alertView:
- (IBAction)logout:(id)sender {
UIAlertView *logoutConfirm = [[UIAlertView alloc] initWithTitle: @"Logout" message: @"Sure ? " delegate: self cancelButtonTitle: @"Ok" otherButtonTitles:@"Cancel", nil];
[logoutConfirm show];
}
// Logout
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
// Logs to track the bug
NSLog(@"LOG :%@", [self.navigationController viewControllers]);
NSLog(@" LOG 2 : %@", [self.navigationController.viewControllers objectAtIndex:0]);
if (buttonIndex == 0) {
[self.navigationController popToRootViewControllerAnimated:NO];
}
}
使用此消息,popToRootViewControllerAnimated
会使应用程序在第三个ViewController
上崩溃而不是第二个:
Terminating app due to uncaught exception 'UIViewControllerHierarchyInconsistency', reason: 'adding a root view controller <MainViewController: 0xXXXXXX> as a child of view controller:<UINavigationController: 0xXXXXXX>'
有我的日志:
2014-09-25 10:24:35.074 Poject[18594:654203] LOG :(
"<MainViewController: 0xXXXXXXX>",
"<secondViewController: 0xXXXXXXX>",
"<thirdViewController: 0xXXXXXXX>"
)
2014-09-25 10:24:35.075 Poject[18594:654203] LOG 2 : <MainViewController: 0xXXXXXXX>
似乎我添加了一个UIViewController
,但只是想回到第一个viewController ...我觉得如果它在第二个ViewController上工作却很奇怪但是没有第三个......
更新
@mehul patel告诉我在我的AppDelegate.h中评论这一行:
[self.window addSubview:self.navigationController.view];
因为:
您无法将rootViewController作为子视图添加到窗口,它将以任何方式崩溃
但是现在,pushViewController在&#34;登录按钮&#34;在我的firstViewController中不再工作了。它什么都不做,所以我NSLog我的navigationController的控制器数组
我第一次得到:
2014-09-25 16:48:07.512 Project[22023:780717] (
"<MainViewController: 0xf81f290>"
)
我第二次得到:
2014-09-25 16:48:12.104 Project[22023:780717] (
"<MainViewController: 0xf81f290>",
"<MenuSelectionViewController: 0xd929030>"
)
但是,观点并没有改变......
感谢您的帮助!
答案 0 :(得分:1)
试试这个
- (void) logout {
@try {
NSArray *controllers = [self.navigationController viewControllers];
if (controllers && [controllers count] > 0) {
UIViewController *loginController = [controllers objectAtIndex:0];
[self.navigationController popToViewController:loginController animated:YES];
}
}
@catch (NSException *exception) {
// Throws an exception
}
}
答案 1 :(得分:0)
我们在AppDelegate:didFinishLaunchingWithOptions
self.window.rootViewController = self.rootViewController;
[self.window addSubview:self.navigationController.view];
必须删除这两行,我们补充说:
self.window.rootViewController = navigationController;
这解决了这个问题,适用于iOS7和iOS8。