iOS 4 应用程序终止和撤消

Posted

技术标签:

【中文标题】iOS 4 应用程序终止和撤消【英文标题】:iOS 4 Application Termination and Undo 【发布时间】:2010-08-19 21:41:15 【问题描述】:

使用NSUndoManager 时处理 ios 4 应用程序终止的好方法是什么?

我有一个使用 Core Data 的 iPhone (iOS 4) 应用程序。该应用程序允许用户编辑托管对象,我使用NSUndoManager 以一种简单的方式实现撤消:在模态显示编辑器视图之前,我为托管对象上下文创建一个新的NSUndoManager。我还开始撤消分组,以便在用户点击“取消”按钮时可以轻松撤消任何更改。如果用户点击“保存”,我只需删除撤消管理器,更改就会永久生效。到目前为止,一切顺利。

如果用户在编辑对象的过程中按下主页按钮(或接听电话),应用程序将暂停。它向应用程序委托发送applicationDidEnterBackground 消息,我利用这个机会保存托管对象上下文。上下文当然包含新的编辑,只是等待NSUndoManager 撤消。

问题是:如果应用程序后来“未暂停”,NSUndoManager 仍然存在并且一切正常。但是,如果应用程序被操作系统“在睡眠中杀死”,撤消堆栈就会丢失,并且对对象所做的更改现在将成为永久性的。在重新启动时,我想将应用程序恢复到它被暂停之前的完全相同的状态,但这似乎需要我保存和恢复撤消堆栈。不幸的是,我找不到明显的方法来做到这一点。

是否有一种支持撤消的好方法,以便无论应用程序是否终止,它都能始终如一地工作?我希望我遗漏了一些明显的东西。任何帮助或建议将不胜感激。

【问题讨论】:

【参考方案1】:

您可以花时间在世界上将当前应用状态序列化到磁盘,这样您就可以从中断的地方重新启动...

... 或者您可以通过减少内存占用来回避这个问题,这样您在后台被杀死的可能性就会降低。我怀疑后台调用应用程序的优先级高于其他后台应用程序,即使只是因为它是最近使用的。

内存不足、更新应用程序或点击任务切换器中的框都可能会导致您的应用程序崩溃。是否需要保留应用程序所处的确切状态由您决定。我认为 android 只会将序列化的应用程序状态保留大约 30 分钟,因为短期记忆往往不会持续时间更长。

(什么?.foo.txt.swp 存在?它已经有几个月了!我怎么知道它来自哪里?为什么你不能告诉我它和 foo.txt 之间的变化,以便我决定是否我要保留它吗?)

【讨论】:

好点。如果我理解正确,您实际上是在说:如果一个应用程序在暂停时内存占用很小,那么它的持续时间可能比用户记住他们在做什么的能力要长。很难反驳这一点。我仍然希望有一种相对简单的方法可以让我的应用程序控制可撤消操作是否/何时变为永久性,但我知道提供“一个月前的撤消”可能对大多数用户的好处有限。 解释得很好。似乎没有记录的方法可以从 NSUndoManager 中获取当前状态,所以我认为这不是预期的行为。 我也没有找到任何东西。感谢您的帮助。

以上是关于iOS 4 应用程序终止和撤消的主要内容,如果未能解决你的问题,请参考以下文章

iOS5 和 XCode4 错误 - 由于未捕获的异常“NSUnknownKeyException”而终止应用程序

c++11的线程,怎么终止

iOS XCTestCase 启动、执行一些操作、终止应用并重新启动应用

检测 iOS 13 撤消和重做

如何在qt安装程序框架中的卸载步骤中省略component.addOperation的撤消步骤?

IOS 8:带有撤消和重做按钮的自定义键盘