【问题标题】:iOS8 Window hierarchyiOS8 窗口层次结构
【发布时间】:2014-11-17 20:29:42
【问题描述】:

我目前对此错误消息有疑问,它只会在应用程序中出现一次。

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

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

用户登录后被定向到的 ViewController 是由 :

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

我已经看到我应该关闭以前的视图控制器,但我没有成功停止此消息。

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

【问题讨论】:

  • 向我们展示您展示NavViewController的方法。包括方法的声明,而不仅仅是主体。

标签: objective-c uiviewcontroller ios8 segue


【解决方案1】:

假设您使用的是故事板,您可以在 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];
        }

      }
  }

身份验证过程保持不变; IE。身份验证后仍然调用 performSegueWithIdentifier

【讨论】:

    【解决方案2】:

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

    我和你有同样的情况,我在这里发布了一个感谢的答案:https://stackoverflow.com/a/12236177/1641848

    【讨论】:

    • 谢谢你,虽然现在很烦人,但它不会对应用程序的操作产生不利影响,但仍然需要处理。
    猜你喜欢
    • 2018-11-14
    • 1970-01-01
    • 1970-01-01
    • 2015-05-29
    • 2018-04-29
    • 1970-01-01
    • 1970-01-01
    • 2015-04-27
    • 1970-01-01
    相关资源
    最近更新 更多