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

Swift UIDocument在应用程序崩溃/强制退出时恢复未保存的更改,swift,recovery,change-tracking,uidocument,Swift,Recovery,Change Tracking,Uidocument,据我所知,UIDocument类可以跟踪文件中未保存的更改,甚至可以锁定文件,使其无法由多人签出。但是,如果用户在不保存的情况下强制退出应用程序,或者应用程序崩溃,会发生什么?如何恢复对UIDocument的未保存更改,以便在应用程序重新启动时重新打开带有最新未保存更改的UIDocument?我是否需要在更改每个文件之前复制副本,并更改临时副本,直到用户保存更改?还是苹果提供了更简单的实现?我还考虑将每个UIDocument实例的Data文件内容和undoManager作为缓存定期编码和存储。这

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

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

苹果在特定的时间点触发后台保存操作(比如:基于时间,应用程序切换到后台,在其他进程尝试访问文件之前,…),但我找不到任何明确的语句,当应用程序强制退出时会发生什么

也就是说,逻辑和常识告诉我,如果强制退出应用程序,当前文档状态将无法保存。即使为强制退出手动执行“快速保存”,在技术上也可能不可行。定期的后台保存操作(就像UIDocument已经做的那样)可能是最好的策略

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


你应该看报纸。它很长,但它更详细地解释了这个过程。我给你们的建议是,实施苹果强加的战略。这些策略是合理的,适用于苹果生态系统中的许多应用程序及其用户。除此之外,您还降低了实施成本,并进行了automagic改进(当Apple更新其实施时)。

除了您的建议之外,我如何允许用户在选择保存文档之前对文档进行未保存的更改,同时恢复任何未保存的更改,就像电脑关机时Word所做的那样?