据我所知,UIDocument类可以跟踪未保存的文件更改,甚至可以锁定文件,使其不能被多个人检出.但是如果用户强制退出应用程序而不保存或应用程序崩溃会发生什么?我将如何恢复未保存的UIDocument更改,以便在应用程序重新启动时重新打开具有最新未保存更改的UIDocument?我是否需要在更改每个文件之前制作副本并更改临时副本,直到用户保存更改为止?或者Apple提供更简单的实现?我还考虑将每个UIDocument实例的数据文件内容和undoManager周期性地编码和存储为缓存.那会有用吗?
解决方法
UIDocument和UIManagedDocument执行自动更改跟踪(调用一个函数,如果文档已更改,您可以返回true)并通过遵守其他系统约束将更改保存到磁盘(例如:如果另一个进程正在尝试读取文件).
如果你不覆盖基类方法,那么Apple的保存方式是非常安全的.触发保存操作时,Apple会保存到临时文件,如果保存成功,则快速重命名并删除原始文件(IIRC重命名/删除是原子的,或接近原子的).您可以假设保存操作不会在文件系统中留下损坏的文件,占所有情况的99.99%.
如果你不覆盖基类方法,那么Apple的保存方式是非常安全的.触发保存操作时,Apple会保存到临时文件,如果保存成功,则快速重命名并删除原始文件(IIRC重命名/删除是原子的,或接近原子的).您可以假设保存操作不会在文件系统中留下损坏的文件,占所有情况的99.99%.
Apple触发器在后台保存操作在特定点(例如:基于时间,应用程序切换到后台,在其他进程尝试访问文件之前,…),但我找不到任何明确的声明当应用程序是什么时会发生什么强行退出.
也就是说,逻辑和常识告诉我,如果强制退出应用程序,则无法保存当前文档状态.即使为强制退出手动执行“快速保存”也可能在技术上不可行.定期后台保存操作(如UIDocument已经执行)可能是最佳策略.
关于保存撤消管理器的状态:这与保存UIDocument的技术问题相同.没有任何事件或其他任何东西告诉应用程序它将被强制退出.
你应该阅读Apple Documentation.它很长,但它更详细地解释了这个过程.我建议你实施Apple强加的策略.这些策略是合理的,适用于Apple生态系统中的许多应用程序及其用户.最重要的是,您可以降低实施成本并实现自动化改进(当Apple更新其实施时).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。