gpt4 book ai didi

objective-c - UITabBarController 中的 View 在内存警告后消失

转载 作者:行者123 更新时间:2023-11-28 17:38:07 25 4
gpt4 key购买 nike

我在 UITabBarController 的选项卡之一中有一个 UINavigationController

我现在在整个应用程序(使用 presentViewController:animated:completion:)上呈现一个新的 View Controller (我们称它为 Steve)。

然后,我模拟低内存。

在解雇 Steve 之后(使用 dismissViewControllerAnimated:completion:),我现在可以看到 UINavigationController 的 View 消失了;在选项卡内;只看到一个空的白色区域!

这是为什么?我已经尝试在 Steve 被解雇时调用所有可以想象的 Controller 上的 view 方法,但选项卡的内容仍然是空的(白色)。

奇怪的是:如果我点击另一个标签,然后点击原来的标签,内容(导航 Controller )再次显示正常。标签栏 Controller 是否做了一些特殊的事情来强制显示 View ?


更新:在解雇史蒂夫之前,我能够用这段可怕的代码“解决”我的问题:

[[[[[self tabBarController] view] subviews] objectAtIndex:0]
addSubview:[[self navigationController] view]];

它所做的是找到标签栏 Controller 的 subview ,该 subview 不是标签栏(即顶 View ),然后将导航 Controller 的 View 添加为其 subview 。

这当然很糟糕,因为它对标签栏 Controller View 的 subview 结构进行了内部假设。

如果有人有更好的解决方案,请告诉我。

最佳答案

当您的应用程序收到内存警告时,它要做的第一件事就是删除任何已加载 View 但当前不可见的 View Controller 的 View 层次结构(例如您的 UINavigationController)。最有可能的是,导航堆栈顶部的任何 View Controller 都已删除其 View ,但在重新出现时不会重新加载它们。

始终将 View 构建代码放在 -loadView-viewDidLoad 中,而不是放在 -init 中。这样,如果 View Controller 由于内存警告而被删除,它将重建您的 View 。

(附言:你的 hack 起作用的原因是你调用 [[self navigationController] view] 的位,它又调用了 -loadView 在顶部的 VC堆栈,迫使它重建它的 View 。)

关于objective-c - UITabBarController 中的 View 在内存警告后消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9164730/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com