ios - 修复核心数据迁移错误的最佳方法

标签 ios objective-c core-data

我有一个使用核心数据的应用程序,我已经设置了轻量级迁移。当您第一次创建应用程序时,xcode 会生成默认方法。 persistentStoreCoordinator getter 调用 abort() 方法,它表示应该在运输应用程序中替换它。我认为我的应用程序处理此失败迁移的最佳方法是完全重置核心数据,然后重新加载所有信息。这是最好的方法吗?如果是,我该怎么做?

最佳答案

“最佳”答案始终取决于您的应用。

  1. 此错误只应在开发期间发生。通过适当的测试,您永远不会在生产中看到此错误。我一直认为这是一个开发级别的错误,因此 NSLogabort() 是合适的。

  2. 如果您的数据是可替换的(即您正在使用 CD 缓存来自 Internet 的数据等),那么可以在出现此错误时删除数据库并从头重建它。如果您的数据不可替换,那么这是一个糟糕的解决方案,请参见第 1 点。

更新1

将其放入更新中,因为它很重要而且我不希望它在评论中丢失:

@MarcusS.Zarra I know that this error should never happen, however I don't think it is unrecoverable.

在生产中,如果您在 -addPersistentStore... 上出错,就该数据库而言,它是不可恢复的,否则您不会首先遇到错误。所以上面两个建议,多测试或者替换数据。

您将从该方法中得到两个错误(忽略 iCloud),迁移失败或打开文件失败。

如果您未能打开该文件,则该文件已失效并且在没有人为干预的情况下无法打开。

如果迁移失败,那么您将丢失源数据模型,并且如果没有包含源模型的新应用程序构建,您将无法恢复它。

有一个坏的数据文件是非常罕见的。它表示文件系统出现故障或其他一些极不寻常的情况。

没有源数据模型是开发人员 100% 可以避免的情况

无论哪种情况,在生产环境中,您都无法从错误中恢复。

关于ios - 修复核心数据迁移错误的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20845356/

相关文章:

iphone - UIView 在 UITableViewController 的中心

ios - NSCalendarUnit:NSCalendarUnitNanosecond是否是NSCalendarUnit的有效枚举值?

swift - 使用预填充的核心数据部署应用程序

swift - 抽象核心数据获取请求

objective-c - 停止通过 NSView 进行透明绘制

ios - 将从核心数据中获取的数据分配给 UIPickerView

ios - swift 。从 JSON 到对象模型的映射。数组的数组

ios - 对于存储不断增长的数据记录集合,NSUserDefaults 还是 CoreData 更好?

objective-c - 在 Objective C 中为弱属性创建自定义 setter 的正确方法是什么?

objective-c - 如何通过 Cocoa 查找 mac os 中的显示器数量?