【发布时间】:2014-02-04 22:13:57
【问题描述】:
我知道很多用户都问过这个问题,但我没有找到适合我的问题的解决方案。
我正在使用splitViewController,我隐藏了我的rootViewController,在detailViewController 中我正在推送和弹出不同的ViewControllers。
当我从ViewController-1 导航到ViewController-2 时,一切正常,当我再次使用[self.navigationController popViewControllerAnimated:NO ]; 从viewController-2 返回到ViewController-1 时,一切正常。
现在,当我从 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
我启用了僵尸对象。 image
我的应用程序代码如下: 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.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];
}
【问题讨论】:
-
你能发布一些代码吗?你的描述似乎很好。
-
@walinaqvi,请发布一些代码,您很好地解释了您的问题。很可能是您在某个地方没有正确推动
-
当然,这是我的代码,用于推送我正在使用的新视图控制器:[self.navigationController pushViewController:MyViewContrller animated:NO];弹出 Viewcontroller i;'m using:[self.navigationController popViewControllerAnimated:NO ];
-
@walinaqvi 请忽略帕万在回答中所说的一切。你不应该在应用程序委托中放置任何东西。这是一件非常糟糕的事情。请不要这样做。
-
@walinaqvi 同意fogmeister 的观点。另外,我看到您实际上已经找到了问题的原因 - 您可以回答自己的问题并接受它。
标签: ios objective-c ipad uiviewcontroller uinavigationcontroller