根据文章我已经阅读了启用核心数据轻量级迁移的正确方法是将选项传递给 addPersistentStoreWithType :
According to the articles I have read the correct way to enable core data light weight migrations is by passing options to addPersistentStoreWithType:
let mOptions = [NSMigratePersistentStoresAutomaticallyOption: true, NSInferMappingModelAutomaticallyOption: true] try coordinator!.addPersistentStoreWithType( NSSQLiteStoreType, configuration: nil, URL: url, options: mOptions)但是在我的中Xcode 8 Swift 3 项目我找不到 addPersistentStoreWithType 的调用位置。这是我创建项目时生成的唯一核心数据代码:
But in my Xcode 8 Swift 3 project I can't find where addPersistentStoreWithType is called. This is the only core data code that was generated when I created my project:
// MARK: - Core Data stack lazy var persistentContainer: NSPersistentContainer = { /* The persistent container for the application. This implementation creates and returns a container, having loaded the store for the application to it. This property is optional since there are legitimate error conditions that could cause the creation of the store to fail. */ let container = NSPersistentContainer(name: "Habits") container.loadPersistentStores(completionHandler: { (storeDescription, error) in if let error = error as NSError? { // Replace this implementation with code to handle the error appropriately. // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. /* Typical reasons for an error here include: * The parent directory does not exist, cannot be created, or disallows writing. * The persistent store is not accessible, due to permissions or data protection when the device is locked. * The device is out of space. * The store could not be migrated to the current model version. Check the error message to determine what the actual problem was. */ fatalError("Unresolved error \(error), \(error.userInfo)") } }) return container }() // MARK: - Core Data Saving support func saveContext () { let context = persistentContainer.viewContext if context.hasChanges { do { try context.save() } catch { // Replace this implementation with code to handle the error appropriately. // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. let nserror = error as NSError fatalError("Unresolved error \(nserror), \(nserror.userInfo)") } } }如何使用Swift 3在Xcode 8中启用轻量级迁移?
推荐答案您可以使用 NSPersistentStoreDescription 来执行此操作,这是所有这些选项移至的地方在Swift 3更新中。在调用 loadPersistentStores 之前执行此操作:
You do it using NSPersistentStoreDescription, which is where all those options moved to in the Swift 3 updates. Do this before the call to loadPersistentStores:
let description = NSPersistentStoreDescription() description.shouldInferMappingModelAutomatically = true description.shouldMigrateStoreAutomatically = true container.persistentStoreDescriptions = [description]更多推荐
在Swift 3中启用核心数据轻量级迁移
发布评论