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



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

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

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新