警告:在显示或关闭过程中尝试从视图控制器<UINavigationController: 0xb359a20>中解除,该警告涉及到IT技术。

3

在我的应用程序中,我正在做的是:

rootViewController -> pushViewController -> pushViewController -> pushViewController -> presentModalViewController

从presentModalViewController,我想直接回到rootViewController。

所以我所做的是:

while(theViewController = [theObjectEnumerator nextObject ])
     {
         if([theViewController modalTransitionStyle] == UIModalTransitionStyleCoverVertical)
         {
             [self.mNavigationController popToRootViewControllerAnimated:
              YES];
         }
     }
 }else
while(theViewController = [theObjectEnumerator nextObject ])
{
    if([theViewController modalTransitionStyle] == UIModalTransitionStyleCoverVertical)
    {
        [self.mNavigationController dismissModalViewControllerAnimated:YES];
    }
}

但是这里我收到了一条消息
警告:试图从视图控制器中解除展示,而此时正在进行展示或解除操作!

之后,应用程序崩溃了。

我搜索了相关信息,但没有找到什么有用的东西。有人能解释一下为什么会发生这种情况吗?


从你的错误提示来看,似乎你正在尝试在视图进行 modal 转场的同时从视图控制器中弹出(pop)。 - user2277872
也许你可以直接从 navigationViewController 弹出模态视图。 - Kyle Fang
或者,如果您同意的话,在dismiss完成块中使用popToRoot - Kyle Fang
我无法使用popToRootViewController,因为当前视图处于presentmodalviewcontroller状态,所以我想我必须像dismissPresentmodalviewcontroller-> popToRootViewController那样处理。@kyle - Arun_
我已经编辑了代码,但它仍然无法工作 @kyle - Arun_
1个回答

7
[self dismissViewControllerAnimated:YES completion:^{
    [(UINavigationController *)self.presentingViewController popToRootViewControllerAnimated:YES];
}];

这段代码对我来说很好用,
重要提示: viewController 必须由 navigationController 呈现。(在大多数情况下) 如果不是这样,请调用 self.presentingViewController.navigationController

这是嵌套dismiss和presentation的正确方法。谢谢! - Rashmi Ranjan mallick
当使用这个方法时,我会收到“Unbalanced calls to begin/end appearance transitions for”警告。 - Adam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接