不在只有 2 个视图控制器的视图层次结构中?

Posted

技术标签:

【中文标题】不在只有 2 个视图控制器的视图层次结构中?【英文标题】:Not in view hierarchy with only 2 view controllers? 【发布时间】:2012-11-29 23:41:00 【问题描述】:

我有两个通过 segue 相互连接的视图控制器。当有人按下按钮时,他们会转换到 viewcontroller2。在那个 viewdidload 中,然后我通过使用以下代码启动 segue “backs”来将它们启动回原始视图控制器:

 [self performSegueWithIdentifier: @"backs" sender: self];

但是,它一直拒绝这种简单的转换,说我的视图控制器超出了层次结构?只有两个视图控制器,所以我想知道这怎么可能?

【问题讨论】:

【参考方案1】:

viewDidLoad 太早了。视图已加载,但尚未放入视图层次结构中。你想等到viewDidAppear。这是视图控制器的视图实际上是完整视图层次结构的一部分的第一个时刻。 (即使那样你也可能不得不使用延迟性能;我不确定。)

关于您所说的另一个问题是,如果您通过 segue 从视图控制器 A 转到视图控制器 B,则无法通过正常的 segue 返回。您必须使用新的“展开”转场功能,否则手动返回(例如,关闭呈现的控制器,弹出推送的控制器)。

【讨论】:

你可能会发现我的书有助于理解视图控制器的工作原理(以及它们是什么):apeth.com/iosBook/ch19.html 哇,展开功能非常愚蠢。有没有其他的实现方式? 我认为 unwind 很棒。但是如果你不喜欢它(或者不理解它),就像我说的那样,就做我们在 iOS 6 之前所做的事情——手动返回,基本上就好像 segues 和 storyboards 不存在一样。

以上是关于不在只有 2 个视图控制器的视图层次结构中?的主要内容,如果未能解决你的问题,请参考以下文章

尝试呈现其视图不在 Windows 层次结构中的 ViewController

收到推送通知时显示视图控制器不起作用,其视图不在窗口层次结构中

视图不在窗口层次结构错误中

Swift 3 尝试呈现其视图不在窗口层次结构中

iOS viewWillAppear 错误:“视图不在窗口层次结构中”

presentViewController 警告视图不在窗口层次结构中