1

当我的 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. 我在让 Dropbox 模式关闭之前dismissViewControllerAnimated进行了人为延迟,但这无济于事:[NSThread sleepForTimeInterval:2.0];
  2. 我试过关闭动画:[self dismissViewControllerAnimated:NO completion:nil];这也无济于事。
  3. 我已经尝试检查已经在进行中的模态解雇:if(![self isBeingDismissed]){ ... }但没有运气。

有任何想法吗?我怎样才能确定究竟是什么呈现/关闭并阻止模态关闭?

iOS 7 + Xcode 5

4

3 回答 3

1

我发现了那个问题。你可以看到这条线DBSession+ios.m

[rootController presentModalViewController:navController Animation:YES];

因此,在内部,他们将展示他们的身份验证视图控制器self。您已经从self. 因此,当他们或您尝试从自己关闭视图控制器时,请给出此警告,因为它已呈现视图控制器。因此,不要将 self 传递给 dropBox,而是传递intro视图控制器。

[[DBSession sharedSession] linkFromController:intro];
于 2014-02-20T05:53:39.297 回答
0

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

在0.50 到 1秒之间获取NSTimer和关闭 ViewController 。这是一个有用的技巧,所以你当前的 viewController 已经完成了它的动画。

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

[self dismissViewControllerAnimated:NO completion:nil];
于 2014-02-20T05:42:35.170 回答
0

尝试调用

[self dismissViewControllerAnimated:YES completion:nil];

从 introViewController 内部而不是从根目录。如果没有其他模式,这应该调用 self.presentingViewController。所以我会在第一个的完成句柄块中嵌套一个

于 2014-02-20T05:35:23.907 回答