UIDocument在应用程序崩溃/强制退出时恢复未保存的更改

时间:2017-05-15 16:57:00

标签: swift recovery change-tracking uidocument

据我所知,UIDocument类可以跟踪未保存的文件更改,甚至可以锁定文件,以便多个人无法检出。但是如果用户强制退出应用程序而不保存或应用程序崩溃会发生什么?我如何将未保存的更改恢复为UIDocument,以便在应用重新启动时重新打开UIDocument最近未保存的更改?我是否需要在更改每个文件之前制作副本并更改临时副本,直到用户保存更改为止?或者Apple提供更简单的实现吗?我还考虑将Data文件内容和每个undoManager实例的UIDocument定期编码和存储为缓存。那会有用吗?

1 个答案:

答案 0 :(得分:1)

UIDocumentUIManagedDocument执行自动更改跟踪(调用一个函数,如果文档已更改,您可以返回true)并通过遵守其他系统约束将更改保存到磁盘(例如:if另一个进程正在尝试读取该文件)。 如果你不重写基类方法,那么Apple的保存方式是非常安全的。触发保存操作时,Apple会保存到临时文件,如果保存成功,则快速重命名并删除原始文件(IIRC重命名/删除是原子的,或接近原子的)。您可以假设保存操作不会在文件系统中留下损坏的文件,占99.99%。

Apple触发器在后台保存操作的特定点(例如:基于时间,应用切换到后台,其他进程尝试访问文件之前,......),但我无法找到任何明确的声明当应用程序强行退出时会发生。

那就是说,逻辑和常识告诉我,如果你强制退出一个应用程序,当前的文档状态就不能被保存。即使实施了快速保存"手动进行强制退出可能在技术上不可行。定期后台保存操作(如UIDocument已经执行)可能是最好的策略。

关于保存撤消管理器的状态:这与保存UIDocument的技术问题相同。没有任何事件或任何其他事情告诉应用程序它将被强制退出。

您应该阅读Apple Documentation。它很长,但它更详细地解释了这个过程。我建议你实施Apple强加的策略。这些策略是合理的,适用于Apple生态系统中的许多应用程序及其用户。最重要的是,您可以降低实施成本并实现自动化改进(当Apple更新其实施时)。