在使用NSUndoManager时,处理iOS 4应用程序终止的好方法是什么
我有一个使用核心数据的iPhone (iOS 4)应用程序。该应用程序允许用户编辑托管对象,并且我以一种简单的方式使用NSUndoManager实现了undo :在以模态方式显示编辑器视图之前,我为托管对象上下文创建了一个新的NSUndoManager。我还开始撤消分组,这样当用户点击“取消”按钮时,任何更改都可以很容易地撤消。如果用户点击“保存”,我只需删除撤消管理器,更改就会永久生效。到现在为止还好。
如果用户在编辑对象的过程中按下Home按钮(或接听电话),应用程序将被挂起。它向应用程序代理发送一条applicationDidEnterBackground消息,我利用这个机会保存托管对象上下文。当然,上下文包含新的编辑,只是等待NSUndoManager撤消。
问题是:如果应用程序后来是“未挂起的”,NSUndoManager仍然存在,并且一切正常。然而,如果应用程序被操作系统“在睡眠中杀死”,撤销堆栈就会丢失,对对象所做的更改现在就会成为永久性的。在重新启动时,我想将应用程序恢复到挂起前的完全相同的状态,但这似乎需要我保存并恢复撤销堆栈。不幸的是,我找不到一种显而易见的方法来做到这一点。
有没有好的方法来支持undo,这样无论应用程序是否被终止,它都能一致地工作?我希望我漏掉了一些明显的东西。如有任何帮助或建议,将不胜感激。
发布于 2010-08-20 08:24:51
你可以花费所有的时间将你当前的应用程序状态序列化到磁盘上,这样你就可以在你停止的地方重新启动……
..。或者你可以通过减少内存占用来避开这个问题,这样你就不太可能在后台被杀死。我怀疑,由于电话呼叫的背景应用程序比其他后台应用程序更优先,如果仅仅是因为它最近使用。
内存不足,更新应用程序,或者轻敲任务切换器中的框都会杀死你的应用程序。这取决于你是否需要保留应用程序所处的确切状态。我认为Android只能将序列化的应用程序状态保留大约30分钟,因为短期记忆不会持续很长时间。
(什么?.foo.txt.swp存在吗?已经有几个月了!我怎么知道它是从哪里来的?您为什么不能向我展示一下它和foo.txt之间的变化,这样我就可以决定是否要保留它了?)
https://stackoverflow.com/questions/3526487
复制相似问题