首页 > 解决方案 > 尝试在 CoreData 中添加持久存储时出现不一致的崩溃

问题描述

在迁移到新的 CoreData 模型时,我正面临一些设备上发生的奇怪崩溃,由 Firebase 和 Xcode 崩溃历史报告。唯一需要完成的 chan 和添加 3 个新属性是删除一个表/对象中的几个属性。我已经重新生成了类并升级了模型版本,因为它不需要轻量级迁移。

我得到的只是:

crash_info_entry_0
Fatal error: Error migrating store: Error Domain=NSCocoaErrorDomain Code=256 
"The file "<FileName>.sqlite" couldn't be opened." UserInfo={NSFilePath=/var/mobile/Containers/Data/Application/45859729-F07E-4006-8742-3B53DF6D1CE9/Documents/<FileName>.sqlite, NSSQLiteErrorDomain=23}: file /ProjectName/Repo/Models/Storage/CoreData/CoreDataEngine.swift, line 137

我正在使用 Swift 4.2。

标签: ioscore-datacore-data-migration

解决方案


SQLite 错误 23 是授权错误。这可能意味着您在应用程序的功能中打开了数据保护(或者您NSPersistentStoreFileProtectionKey在加载持久存储时正在使用),并且您在文件不可访问时尝试访问持久存储(例如,当屏幕锁定)。

如果您可以关闭数据保护,那将解决问题。如果您需要数据保护,您需要在您的应用委托中使用数据保护相关的方法来检测您的应用何时可以安全地访问文件。


推荐阅读