Swift 3 Core Data issue – All Data Missing
我将我的 Core Data 项目从 Swift 2 升级到 Swift 3。用 NSPersistentContainer 替换 Core Data 堆栈。但是新版本找不到旧数据。

安装新版本后:

Swift 3 版本应用找不到任何数据
我的应用程序的功能是记录单词/句子及其中文含义。如果我在App Store上发布此版本,用户将在更新后丢失所有记录。
我该如何解决这个问题?
这是我的 Swift 3 代码:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
// MARK: – Core Data stack
lazy var applicationDocumentsDirectory: URL = { lazy var persistentContainer: NSPersistentContainer = { let documentsDirectory = FileManager.default.urls(for: FileManager.SearchPathDirectory.documentDirectory, in: FileManager.SearchPathDomainMask.userDomainMask) let storeUrl = self.applicationDocumentsDirectory.appendingPathComponent(“SingleViewCoreData.sqlite”) print(storeUrl) container.persistentStoreDescriptions = [NSPersistentStoreDescription(url: storeUrl)] container.loadPersistentStores(completionHandler: { (storeDescription, error) in |
Swift 2 代码:
|
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
// MARK: – Core Data stack
lazy var applicationDocumentsDirectory: NSURL = { lazy var managedObjectModel: NSManagedObjectModel = { lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator = { dict[NSUnderlyingErrorKey] = error as NSError return coordinator lazy var managedObjectContext: NSManagedObjectContext = { |
代码升级到 Swift 3 后如何保留数据?
另外:swift 2版本是从App Store安装的,swift 3版本是从Xcode安装的。
项目的 Github 存储库
- 您是否记录了 modelURL、container、storeUrl 等?它们是否与 Swift 2 版本保持一致?
- 我找不到 Swift 2 版本的日志。但是如你所见,我的modelURL、storeUrl代码和之前的版本是一样的。
- 您是否实施了轻量级迁移?我相信这应该可以解决问题,如果您将属性从一个版本添加/删除/更改到应用程序的下一个版本,您必须实施轻量级迁移,以便该应用程序可以修改数据库而不是替换
您是否实施了轻量级迁移?
当你初始化你的持久化存储时,你可以添加\\’Options\\’,对于轻量级迁移添加:
|
1
2 |
let options = [NSMigratePersistentStoresAutomaticallyOption: true,
NSInferMappingModelAutomaticallyOption: true] |
然后,当您首先更改每个应用版本的数据库时,您必须转到 .xcdatamodel 并转到:
|
1
|
‘editor’ > ‘Add Model Version’
|
在顶部菜单中,然后对此版本进行更改,并确保在打开模型时它有绿色勾号。
- 我使用 let storeOptions: [String:Any] = [NSPersistentStoreUbiquitousContentNameKey:”CloudNewWordsSto??re”,NSMigratePersist??entStoresAutomatical??lyOption:true, NSInferMappingModelAutomaticallyOption:true]。有效!谢谢,你救了我。
- 很高兴能有所帮助:D
来源:https://www.codenong.com/41276943/
