首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试弹出一个不存在的视图控制器

尝试弹出一个不存在的视图控制器
EN

Stack Overflow用户
提问于 2014-01-16 06:05:43
回答 1查看 5.4K关注 0票数 1

我知道很多用户都问过这个问题,但我没有找到合适的解决方案。

我使用的是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时,它会崩溃,并出现以下错误。

代码语言:javascript
复制
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Tried to pop to a view controller that doesn't exist

我启用了僵尸对象。图像

我的应用程序代码如下:1.AppDelegate

代码语言:javascript
复制
 - (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

代码语言:javascript
复制
   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];
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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的代表,现在它工作得很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21154437

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档