iOS8窗口层次结构

时间:2014-09-23 14:59:14

标签: objective-c uiviewcontroller ios8 segue

我目前遇到此错误消息的问题,它只会在应用程序中出现一次。

Attempt to present <NavViewController: 0x1457c370> on <InitalStartupViewController: 0x145371a0> whose view is not in the window hierarchy!

应用程序的运行方式是它会要求用户只登录一次(除非卸载了应用程序),然后每次用户被定向到以下视图控制器(这也会发生在用户之后)登录)。这是用户登录后显示的唯一错误消息。

登录后用户所指向的ViewController是:

 [self performSegueWithIdentifier:@"alreadyRegistered" sender:self];

我已经看到我应该解雇之前的视图控制器但是我没有成功停止此消息。

在这种情况下,我应该做一些不同的事情,在第一次登录或之后每次登录后移动到最终的ViewController。

2 个答案:

答案 0 :(得分:1)

假设您正在使用storyboard,您可以在viewDidLoad中为authenticationViewController放置一个条件,如下所示;

  - (void)viewDidLoad{
      [super viewDidLoad];
      // validate  authentication viewController being displayed

      if(dontDisplayauthenticationController){

         UIStoryboard *storyBoard = self.storyboard;
         UIViewController *targetViewController = [storyBoard instantiateViewControllerWithIdentifier:@"alreadyRegistered"];
         UINavigationController *navController = self.navigationController;


        if (navController) {
           [navController pushViewController:targetViewController animated:NO];
        } else {

           [self presentViewController:targetViewController animated:NO completion:nil];
        }

      }
  }

身份验证过程保持不变; I.E.身份验证后仍然调用performSegueWithIdentifier

答案 1 :(得分:0)

您遇到此问题是因为您试图提供未嵌入导航控制器(或部分导航控制器)的视图控制器。

我和你一样有同样的情况,我在这里发表了一个赞赏的回答:https://stackoverflow.com/a/12236177/1641848