我知道很多用户都问过这个问题,但我没有找到合适的解决方案。
我使用的是splitViewController,我隐藏了我的rootViewController,在detailViewController中,我推和弹出了不同的ViewControllers。
当我从ViewController-1导航到ViewController-2时,运行良好,当我从viewController-2返回ViewController-1时,使用[self.navigationController popViewControllerAnimated:NO ];再次运行良好。
现在,当我从ViewController-2导航到ViewController-3并返回到ViewController-2时,它的工作正常。
但现在,当我从ViewController-2返回到ViewController-1时,它会崩溃,并出现以下错误。
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Tried to pop to a view controller that doesn't exist我启用了僵尸对象。图像
我的应用程序代码如下:1.AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.splitViewController =[[UISplitViewController alloc]init];
// create master and detailViewController for splitView
self.rootViewController=[[RootViewController alloc]init];
self.detailViewController=[[LoginViewController alloc]initWithNibName:@"LoginViewController" bundle:nil] ;
//create navigation controller for root and detailViewController
self.rootNav=[[UINavigationController alloc]initWithRootViewController:rootViewController];
self.detailNav=[[UINavigationController alloc]initWithRootViewController:detailViewController];
//make hide navigation bar
self.rootNav.navigationBarHidden = YES;
self.detailNav.navigationBarHidden = YES;
//set splitViewController with root and detail viewController
self.splitViewController.viewControllers=[NSArray arrayWithObjects:self.rootNav,self.detailNav,nil];
self.splitViewController.delegate=self.detailViewController;
// Now Add the split view controller's view to the window and display.
[self.window addSubview:self.splitViewController.view];
self.window.rootViewController = self.splitViewController;
[self.window makeKeyAndVisible];
return YES;
}2.2.push和pop ViewControllers
push()
{
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
MyViewController *Vc = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil];
[appDelegate.detailNav pushViewController:Vc animated:NO];
}
pop()
{
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
[appDelegate.detailNav popViewControllerAnimated:NO];
}发布于 2014-01-17 04:46:06
最后我找到了解决方案,这是非常愚蠢的错误,我的ViewController-3是UINavigationController的代表。
当我试图弹出viewController-2到viewController-1时,我的UINavigationController正在寻找它在viewController中的委托方法- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated -3,该方法已经被弹出。
我把rootViewController交给了UINavigationController的代表,现在它工作得很好。
https://stackoverflow.com/questions/21154437
复制相似问题