尝试设置 rootViewController 时出现奇怪的行为
Weird behaviour with rootViewController while attempting to set it
我在导航控制器顶部有一个模态视图。
我希望销毁整个堆栈并重新创建一个新堆栈(重新加载)。
但是,当将新的分配给 window.rootViewController
时,警告会在 运行 期间出现并且视图控制器不会被释放。
为了让事情变得更复杂,我在重新加载时自动导航到模态视图控制器 'automatically',< iOS 12 和 iOS 13 的行为不同。
我附上了一个 reprex 来演示将出现的问题。例如。如果你 运行 按原样,在 iOS 13,你会看到计数器从 1
跳到 3
,而在 iOS 12,它从1
到 2
。两者都在泄漏内存(部分或所有视图控制器未被卸载)。
主要问题是,无论您如何替换视图层次结构,您的 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),我可以将我所做的更改推送为一个新分支。
我在导航控制器顶部有一个模态视图。
我希望销毁整个堆栈并重新创建一个新堆栈(重新加载)。
但是,当将新的分配给 window.rootViewController
时,警告会在 运行 期间出现并且视图控制器不会被释放。
为了让事情变得更复杂,我在重新加载时自动导航到模态视图控制器 'automatically',< iOS 12 和 iOS 13 的行为不同。
我附上了一个 reprex 来演示将出现的问题。例如。如果你 运行 按原样,在 iOS 13,你会看到计数器从 1
跳到 3
,而在 iOS 12,它从1
到 2
。两者都在泄漏内存(部分或所有视图控制器未被卸载)。
主要问题是,无论您如何替换视图层次结构,您的 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),我可以将我所做的更改推送为一个新分支。