尝试设置 rootViewController 时出现奇怪的行为

Weird behaviour with rootViewController while attempting to set it

我在导航控制器顶部有一个模态视图。

我希望销毁整个堆栈并重新创建一个新堆栈(重新加载)。

但是,当将新的分配给 window.rootViewController 时,警告会在 运行 期间出现并且视图控制器不会被释放。

为了让事情变得更复杂,我在重新加载时自动导航到模态视图控制器 'automatically',< iOS 12 和 iOS 13 的行为不同。

我附上了一个 reprex 来演示将出现的问题。例如。如果你 运行 按原样,在 iOS 13,你会看到计数器从 1 跳到 3,而在 iOS 12,它从12。两者都在泄漏内存(部分或所有视图控制器未被卸载)。

主要问题是,无论您如何替换视图层次结构,您的 presented VC 都会关闭,这会向您的 viewWillAppear 发送一条消息"pushedVC" ...此时 "pushedVC" 将立即加载并重新呈现 "triggerVC"

您可能想要做的是:

  • jumpToModalVC等于false,直到你想使用它
  • 点击显示的按钮 "triggerVC",关闭模态(自身)
  • 解雇完成后,将 jumpToModalVC 设置为 true 并重建/重置您的层次结构

注:

每个 VC 的 viewWillAppear 对 segues 的链式调用几乎总是导致:

Unbalanced calls to begin/end appearance transitions

为避免这种情况,最好从 viewDidAppear

触发转场

如果你愿意,你可以在你的 GitHub 仓库中将我添加为 "Collaborator"(我的 GitHub 用户 ID 是 DonMag),我可以将我所做的更改推送为一个新分支。