【问题标题】:Application tried to present modally an active controller: uinavigationcontroller应用程序试图以模态方式呈现一个活动控制器:uinavigationcontroller
【发布时间】:2014-03-03 22:12:11
【问题描述】:

我遇到了一个仅定期引发错误的问题。事实上,它似乎几乎是随机的。这就是发生的事情,我正在使用以下代码启动一个模态视图控制器:

- (void)createMessageClicked
{
    UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Channel" bundle:nil];
    UINavigationController *nav = [sb instantiateViewControllerWithIdentifier:@"HIComposeMessageNavController"];
    HIComposeMessageViewController *vc = [[nav viewControllers]objectAtIndex:0];

    vc.channel = [self.channels objectAtIndex:0];
    [self.navigationController presentViewController:nav animated:YES completion:nil];
}

大多数时候,这工作正常。但是有时应用程序会崩溃并引发错误"Application tried to present modally an active controller <UINavigationController>。有什么想法我在这里做错了吗?

【问题讨论】:

    标签: ios iphone objective-c uistoryboard


    【解决方案1】:

    尝试在故事板中实例化嵌入在导航控制器中的控制器,然后创建通用导航控制器的新实例:

    HICompseController *controller = [sb instantiateViewController: 
                                      HIComposeMessageViewController];
    UINavigationController *nav = [[UINavigationController alloc]
                                   initWithRootViewController:controller];
    [self presentViewController:nav animated:YES completion:nil];
    

    【讨论】:

    • 我之前也这样做过,但遇到了同样的错误,这就是我一开始这样做的原因
    • @NickONeill 我根据您的评论编辑了我的答案。
    • 所以这似乎有效。但为什么首先需要它?有人发现了吗?
    【解决方案2】:

    我建议为您的UINavigationController 设置一个 ivar,因为每次触发该操作时,您都在创建一个全新的导航控制器并以模态方式呈现它。

    我怀疑当点击动作之间的时间很接近时,它会更频繁地发生,因此在模态控制器已关闭但没有足够的时间让导航控制器在从同一个类实例化的新控制器之前被释放之前创建并再次以模态方式呈现。通过使用相同的导航控制器,您至少可以确保在通过该方法再次显示之前将其关闭。

    尝试为导航控制器创建一个 ivar,并在该方法中每次重用它。

    【讨论】:

      【解决方案3】:

      这对我有用:

      if let presented = self.presentedViewController,
         !presented.isBeingPresented {
         self.present(navController, animated: true, completion: nil)
      }
      

      【讨论】:

      • Nick 正在使用 Objective-c,您的解决方案是用 swift 编写的。
      猜你喜欢
      • 2011-12-25
      • 2013-02-15
      • 1970-01-01
      • 2018-08-24
      • 2013-01-06
      • 1970-01-01
      • 2017-10-13
      • 2017-09-02
      • 2020-06-06
      相关资源
      最近更新 更多