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

问题描述:

据我了解,在UIDocument类可以跟踪对文件的未保存的更改,甚至锁定该文件,因此它不能由一个以上的人被检查出。但是如果用户强制退出应用程序而不保存或应用程序崩溃会发生什么?如何将未保存的更改恢复到UIDocument,以便在应用程序重新启动时重新打开UIDocument以及最近未保存的更改?我需要在更改每个文件之前制作重复副本,并更改​​临时副本,直到用户保存更改为止?还是Apple提供了一个更简单的实现?我还考虑过编码并将Data文件内容和每个UIDocument实例的undoManager定期存储为缓存。这会起作用吗?UIDocument恢复未保存的更改在应用程序崩溃/强制退出

UIDocumentUIManagedDocument做AUTOMAGIC改变尊重其他系统约束(例如跟踪(调用一个函数,其中文件是否改变了你可以返回true),并保存到磁盘的变化:如果另一个进程正在尝试读取文件)。 如果您不覆盖基类方法,Apple会采用非常安全的方式进行保存。当保存操作被触发时,Apple保存到临时文件,如果保存成功,则完成原始文件的快速重命名和删除(IIRC重命名/删除是原子的,或接近原子的)。您可以假定保存操作不会在文件系统中留下99.99%的损坏文件。

苹果触发保存在特定点后台操作(如:基于时间,程序切换到后台,先于其他进程试图访问该文件,...),但我找不到任何明确的说法发生了什么当应用程序被强制退出时。

这就是说,逻辑和常识告诉我,如果你强制退出一个应用程序,当前文件状态不能保存。即使手动实施强制退出的“快速保存”在技术上可能也不可行。定期的背景保存操作(如UIDocument已经这样做)可能是最好的策略。

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

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

+0

你的建议aside-我会如何让用户直到他们选择保存有文档未保存的更改,同时还恢复任何未保存的更改,就像字确实,如果电脑关机? –