尝试关闭视图控制器时的警告(模态中的模态)

时间:2014-02-20 05:26:12

标签: ios objective-c presentviewcontroller

当我的iOS应用程序第一次启动时,我会自动打开这样的“欢迎”模式:

UIViewController *intro = [self.storyboard instantiateViewControllerWithIdentifier:@"intro"];

intro.modalPresentationStyle = UIModalPresentationFullScreen;

//Show the modal
[self presentViewController:intro animated:NO completion:nil];

在该模式中,指示用户将应用程序链接到Dropbox。他们点击一个按钮来触发:

[[DBSession sharedSession] linkFromController:self];

这是一个Dropbox SDK方法,可以在另一个模式中打开Dropbox身份验证UIWebView,如下所示:http://d.pr/i/6ZnC

一旦他们登录,模态会自动关闭动画。

然后我尝试用这个来关闭原始的介绍模式:

[self dismissViewControllerAnimated:YES completion:nil];

但是我得到了这个警告,模态没有关闭

  

警告:尝试从视图控制器中解除< PPIntroViewController:0xf296ab0>正在进行演示或解雇!

这是我尝试过的:

  1. 我在dismissViewControllerAnimated之前设置了一个人工延迟让Dropbox模式关闭,但它没有帮助:[NSThread sleepForTimeInterval:2.0];
  2. 我尝试关闭动画:[self dismissViewControllerAnimated:NO completion:nil];,这也无济于事。
  3. 我已经尝试检查正在进行的模式解雇:if(![self isBeingDismissed]){ ... }并且没有运气。
  4. 有什么想法吗?如何确定提交/解除的确切内容以及阻止模态关闭?

    iOS 7 + Xcode 5

3 个答案:

答案 0 :(得分:1)

我发现了这个问题。您可以在DBSession+ios.m

中看到此行
  

[rootController presentModalViewController:navController   动画:YES];

因此,在内部,他们将从self展示他们的身份验证视图控制器。您已经从self展示了您的视图控制器。所以当他们或者你试图从自己解除视图控制器时,给出这个警告,因为它有呈现视图控制器。因此,不要将self传递给dropBox,而是传递intro视图控制器。

[[DBSession sharedSession] linkFromController:intro];

答案 1 :(得分:0)

尝试调用

[self dismissViewControllerAnimated:YES completion:nil];

从introViewController内部而不是从根目录中。如果没有其他模态,这应该调用self.presentingViewController。所以我在第一个

的完成句柄块中嵌套一个

答案 2 :(得分:0)

我发现如果您尝试在前一个事务(动画)正在进行时尝试推送/关闭视图控制器,则会出现此问题。

在{strong> 0.50到1 秒之间取NSTimer并解除ViewController。这是一个有用的技巧,所以你当前的viewController完成了它的动画。

否则不确定,但尝试使用dismissViewControllerAnimated设置

[self dismissViewControllerAnimated:NO completion:nil];