Сохранить существующие данные о миграции основных данных - PullRequest
0 голосов
/ 05 января 2019

Я делаю легкую миграцию основных данных, выполняя следующие шаги:

  1. Управление версиями модели данных

  2. Создание нового хранилища постоянства, которое будет совместимо с новой моделью данных.

    lazy var persistentStoreCoordinator: NSPersistentStoreCoordinator =   {
            // Initialize Persistent Store Coordinator
            let persistentStoreCoordinator = NSPersistentStoreCoordinator(managedObjectModel: self.managedObjectModel)
    
            // URL Persistent Store
        let URLPersistentStore = self.applicationStoresDirectory().appendingPathComponent("FieldSense.sqlite")
    
            do {
                // Declare Options
                let options = [ NSMigratePersistentStoresAutomaticallyOption : true, NSInferMappingModelAutomaticallyOption : true ]
    
                // Add Persistent Store to Persistent Store Coordinator
                try persistentStoreCoordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: URLPersistentStore, options: options)
    
            } catch {
                let fm = FileManager.default
                var isDir : ObjCBool = false
                if  fm.fileExists(atPath: (URLPersistentStore?.path)!, isDirectory: &isDir){
              //  if fm.fileExistsAtPath(URLPersistentStore.path!) {
                    let nameIncompatibleStore = self.nameForIncompatibleStore()
                    let URLCorruptPersistentStore = self.applicationIncompatibleStoresDirectory().appendingPathComponent(nameIncompatibleStore)
    
                    do {
                        // Move Incompatible Store
                    //    try fm.moveItemAtURL(URLPersistentStore, toURL: URLCorruptPersistentStore)
                        try fm.moveItem(at: URLPersistentStore!, to: URLCorruptPersistentStore!)
    
                    } catch {
                        let moveError = error as NSError
                        print("\(moveError), \(moveError.userInfo)")
                    }
                }
    
                do {
                    // Declare Options
                    let options = [ NSMigratePersistentStoresAutomaticallyOption : true, NSInferMappingModelAutomaticallyOption : true ]
    
                    try persistentStoreCoordinator.addPersistentStore(ofType: NSSQLiteStoreType, configurationName: nil, at: URLPersistentStore, options: options)
    
                } catch {
                    let storeError = error as NSError
                    print("\(storeError), \(storeError.userInfo)")
                }
    
                // Update User Defaults
                let userDefaults = UserDefaults.standard
                userDefaults.set(true, forKey: "didDetectIncompatibleStore")
            }
    
            return persistentStoreCoordinator
    }()
    

Но когда пользователь обновляет приложение из магазина приложений, существующие пользовательские данные стираются. В чем может быть причина?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...