加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 04:56:25 所属栏目:百科 来源:网络整理
导读:据我所知,UIDocument类可以跟踪未保存的文件更改,甚至可以锁定文件,使其不能被多个人检出.但是如果用户强制退出应用程序而不保存或应用程序崩溃会发生什么?我将如何恢复未保存的UIDocument更改,以便在应用程序重新启动时重新打开具有最新未保存更改的UIDocu
据我所知,UIDocument类可以跟踪未保存的文件更改,甚至可以锁定文件,使其不能被多个人检出.但是如果用户强制退出应用程序而不保存或应用程序崩溃会发生什么?我将如何恢复未保存的UIDocument更改,以便在应用程序重新启动时重新打开具有最新未保存更改的UIDocument?我是否需要在更改每个文件之前制作副本并更改临时副本,直到用户保存更改为止?或者Apple提供更简单的实现?我还考虑将每个UIDocument实例的数据文件内容和undoManager周期性地编码和存储为缓存.那会有用吗?

解决方法

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读