0

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

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

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

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

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

4

1 回答 1

0

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

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

内存不足、更新应用程序或点击任务切换器中的框都可以杀死你的应用程序。由您决定是否需要保留应用程序所处的确切状态。我认为 Android 只会将序列化的应用程序状态保留大约 30 分钟,因为短期记忆不会持续太久。

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

于 2010-08-20T00:24:51.390 回答