3

我有一个正在生产中的 Core Data 应用程序,并且想向现有实体添加属性。经过研究,我发现这是一个“轻量级迁移”,只需要在加载持久存储之前添加NSMigratePersistentStoresAutomaticallyOptionNSInferMappingModelAutomaticallyOption选项到我的:persistentStoreDescriptions

let container = NSPersistentCloudKitContainer(name: "app")

guard let description = container.persistentStoreDescriptions.first else { fatalError("Container not available") }

//For migration VVV

description.setOption(true as NSNumber, forKey: NSMigratePersistentStoresAutomaticallyOption)
description.setOption(true as NSNumber, forKey: NSInferMappingModelAutomaticallyOption)

//End of migration additions ^^^

container.loadPersistentStores(completionHandler: { (storeDescription, error) in
     if let error = error as NSError? {
          fatalError("Store loading failure")
     }
}

虽然这看起来很容易解决,但我只有两个问题在其他任何地方都找不到答案:

1. 对于从现在开始更新其应用程序版本的任何人,我可以为应用程序的所有未来版本保留这两个新的迁移选项吗?

2. 由于我使用的是NSPersistentCloudKitContainer,所以在将新的数据模型发布到 CloudKit Dashboard 时,用户当前的应用程序版本是否应该包括两个迁移选项?我担心如果 CloudKit 数据模型与他们的应用程序版本不同,它会在同步他们的项目时崩溃他们的应用程序

非常感谢您对此的任何帮助!改变数据模型总是一种可怕的经历,而且我从来没有做对过,而且总是导致人们的应用程序崩溃。我非常感谢您能提供的任何帮助。

4

1 回答 1

2

默认情况下设置为true。除非您在某个时候将它们转向,否则您false不会看到任何区别

https://developer.apple.com/documentation/coredata/nspersistentstoredescription/1640566-shouldmigratestoreautomatically

https://developer.apple.com/documentation/coredata/nspersistentstoredescription/1640623-shouldinfermappingmodelautomatic

于 2021-06-01T13:17:07.833 回答