0

我认为这可能归结为我没有完全理解当应用程序收到内存警告时应该做的正确事情(或者当你收到内存警告时,我可能不明白 iOS 自己会做什么)。

这是我的问题的简化版本:

我有一个RootViewController. 它推动了TextViewController我有一个UITextField. TextViewController可以推送一个DetailViewController显示一些细节的。

如果我一直推到DetailsViewController,那么我的导航视图控制器堆栈是[RootVC, TextVC, DetailVC],然后模拟内存警告,TextVCiOS 会自动从内存中卸载。

问题 1: iOS 刚刚决定应该卸载我的视图控制器。当用户弹出DetailVC返回时TextVC,我应该在哪里保存状态信息(例如在文本字段中输入的文本)?现在,文本字段只是回到空白,因为视图控制器被卸载然后重新加载。

问题 2:当我弹回TextVC并点击文本字段时,我的应用程序崩溃了。打开僵尸显示当我点击文本字段时,有些UIView人正在从某个地方收到消息。responderDidBecomeActive:ARC怎么可能做到这一点?在我的viewDidUnload方法中,我将文本字段设置为 nil,甚至将其委托属性设置为 nil。

编辑。新问题:我只是通过覆盖didReceiveMemoryWarningforTextVC并让它不做任何事情来完全解决所有问题。从 1 到非常糟糕,这有多糟糕?

编辑 2.开个玩笑,我是个白痴,忘记在完全不同但相关的一段代码中删除通知的观察者。我仍然不明白当 iOS 扔掉你的废话时应该如何/在哪里保存状态信息。

4

1 回答 1

2

思考的方法如下。当您获得 viewDidUnload 时,系统已清除所有 UI 元素。当你弹回你的视图时,系统会重新加载笔尖,你会再次获得 viewDidLoad,显然所有的数据和设置都会丢失。

对此的解决方案是在任何可能被卸载的 viewConroller 中,您可以保存用户在 ivars 中输入或设置的任何数据 - 例如,您可以将文本保存在 NSString 中。在 viewDidLoad 中,您可以查看该字符串,如果其中有数据,则初始化文本字段。

我告诉你的所有内容都与 ios5 有关。Apple 将在未来改变它在这方面的做法,但我不能在这里真正谈论它,因为我在 WWDC 上学到的东西是保密的。也就是说,您可以通过查看一些 WWDC 视频或阅读私人开发者列表很快找到它。你应该对你将学到的东西感到非常高兴!

于 2012-08-17T12:06:27.607 回答