iOS:presentViewController 错误 不鼓励在分离的视图控制器上显示视图控制器

Posted

技术标签:

【中文标题】iOS:presentViewController 错误 不鼓励在分离的视图控制器上显示视图控制器【英文标题】:iOS: presentViewController error Presenting view controllers on detached view controllers is discouraged 【发布时间】:2017-05-10 22:49:35 【问题描述】:

我正在尝试以编程方式呈现 viewController:

- (void)viewDidLoad 
    [super viewDidLoad];
    NewViewController *vc = [[NewViewController alloc] init];
    [self presentViewController:vc animated:YES completion:nil];

但是我收到了这个错误:

Presenting view controllers on detached view controllers is discouraged 

而且我在 iPhone 上也出现黑屏。

这就是我的故事板和 iPhone 的样子:

任何人都知道我为什么会收到此错误以及为什么会出现黑屏?

非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

您正试图在viewDidLoad 中显示视图控制器。在从 Storyboard 加载 View Controller 的视图时调用此方法。此时 View Controller 尚未显示,因此从应用程序的视图中分离

您可能会因为此错误而出现黑屏。

要解决这个问题在viewDidLoad 中不调用presentViewController,请在视图显示后稍后调用。例如,您可以在视图控制器的viewDidAppear 方法中调用它。

【讨论】:

我将其更改为 viewDidApper 并且我没有错误但仍然有黑屏。有什么想法吗? 您检查过视图调试器中显示的内容吗?有没有给NewViewController的相关方法加断点看是否显示正确? 是的,所有的方法都被调用了。 viewWillAppear 和 viewDidLoad 和 viewDidAppear。但是屏幕是黑的 您通常不会使用 [[NewViewController alloc] init]; 创建视图控制器;视图是如何创建的? 是的,这就是问题所在。因为你使用 Storyboard,为什么不使用 segue?如果您不想看,可以查看this SO answer,了解如何从 Storyboard 正确创建视图控制器。

以上是关于iOS:presentViewController 错误 不鼓励在分离的视图控制器上显示视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

PresentViewController 在 iOS 中隐藏导航栏

PresentViewController iOS 上的 PushView

如何使用 presentViewController 呈现 iOS 键盘扩展

PresentViewController 与 ModalPresentationStyle “UIModalPresentationFormSheet” IOS 8

iOS presentViewController 方法引起的问题

在 iOS 上,presentViewController 会导致溢出(如堆栈溢出)吗?