大约一年半前我开发了一个应用程序,现在我又回来了。这是我开始接触 Swift 的项目,显然从那时起在语言和我的 Swift 能力方面发生了很多变化。
昨天,我第一次更新了我的单一 CoreData 模型以添加一个可选的字符串属性。我做了文件生成位并确保在检查器列中正确选择了新数据模型。
在我的模拟器和测试设备上,我需要删除旧版本的应用程序才能安装新版本,否则我会崩溃。我认为这只是开发环境过程的一部分。 我如何确保升级用户在从 App Store 进行简单更新时不必删除并重新安装?我假设 Xcode/CoreData/Apple 已使用一些内部脚本或进程处理此问题对用户来说是不可见的,“它就是有效。”但我想在这里发布这个,以了解是否需要做任何额外的事情来确保用户从 v1 顺利过渡到 v1.1。
如前所述,我所做的只是一个可选的字符串列。我假设所有现有用户数据都将迁移到新架构,新字段为 nil
。
这里的任何想法都将受到欢迎和赞赏。谢谢!
最佳答案
如果您的应用在升级时在模拟器中崩溃,您的用户也会遇到崩溃。
为避免这种情况,您需要确保遵循以下步骤:
- 确保您不以任何方式更改数据模型的原始版本。
- 在 Xcode 中,选择您的 xcdatamodel 文件,然后从菜单中选择编辑器 > 添加模型版本...
- Xcode 将根据当前模型建议一个新版本名称。记下新版本名称,然后单击“完成”。
- 再次选择 xcdatamodel 文件,转到文件检查器,然后在模型版本下,选择新版本名称使其成为当前版本。
- 在 Project Navigator 中,选择新版本的 xcdatamodel。添加您的属性。
请务必按顺序执行这些步骤。如果您在创建新模型或将其设为当前版本之前添加您的属性,将会发生崩溃。
编辑:这仅在启用轻量级迁移时有效。这是如何执行此操作的代码片段:
let options = [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true]
do {
//coordinator is an NSPersistentStoreCoordinator
try coordinator!.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: url, options: options
} catch var error as NSError {
// handle error however you want here...
abort()
}
关于swift - 防止升级用户时 CoreData 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42091928/