核心数据SQLite存储在更新后变为只读

 天涯老许_137 发布于 2023-01-11 17:00

我有报告称用户在通过App Store更新后无法使用iOS应用程序,因为Core Data使用的SQLite数据库显然已成为只读状态.这发生在读/写持久性存储中,该存储保存在Documents应用程序包的文件夹中.

持久存储是在第一次登录应用程序时为每个用户从头开始创建的.其内容通过自定义渐进式管理对象模型迁移进行维护.实际上,在最近的版本中没有迁移执行,因此应用程序启动后,持久存储应该准备好打开.

我们从用户收到的错误是相同的,它在升级完成后的流程启动早期发生.在userInfo该的NSError对象是什么,我们在这种情况下拍摄的:

NSSQLiteErrorDomain = 264;
NSUnderlyingException = "error during prepareSQL for SQL string 'SELECT Z_VERSION, Z_UUID, Z_PLIST FROM Z_METADATA' : attempt to write a readonly database";

由于我们正在记录的内容以及我们如何管理日志文件存在一些缺点,因此我不确切地知道在打开持久性存储的过程中何时发生这种情况.我们正在使用UIManagedDocument但不通过iCloud共享任何文档.我假设在打开现有文档包时发生错误,但即便如此.(因此,我对未来版本的日志记录进行了改进.)

我最接近再现错误的是persistentStore-shm在iOS模拟器应用程序安装的文档包中使用文件权限0444 ,然后SELECT使用sqlite3命令行界面尝试该语句.在这种情况下的错误SQLITE_CANTOPEN不是SQLITE_READONLY,所以我可能没有关于文件权限的理论.据我所知,UIManagedDocument无论如何都会自动修复文件权限.

我想知道的是,是否有人经历过类似的行为?如果是这样,有没有办法恢复,以便用户不必经历重新创建本地数据存储的过程?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有