【问题标题】:Inconsistent crash while trying to add a persistent store in CoreData尝试在 CoreData 中添加持久存储时出现不一致的崩溃
【发布时间】:2019-05-29 05:54:33
【问题描述】:

在迁移到新的 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。

【问题讨论】:

  • 你找到解决这个问题的方法了吗?我遇到了完全相同的问题,并且已经没有如何调试它的想法了。

标签: ios core-data core-data-migration


【解决方案1】:

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

如果您可以关闭数据保护,那就可以解决问题。如果您需要数据保护,您需要在您的应用委托中使用data protection related methods 来检测您的应用何时可以安全地访问该文件。

【讨论】:

  • 实际上商店保护既没有设置在我的应用程序的功能中,也没有在加载商店时设置。这有点奇怪,因为我只能在 Firebase 上看到崩溃。它在这里特别崩溃addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: persistanceStoreURL, options: options)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 2011-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-14
  • 2011-01-17
相关资源
最近更新 更多