Detecting a Lightweight Core Data Migration

后端 未结 3 1162
走了就别回头了
走了就别回头了 2020-12-12 19:56

I\'m using Core Data\'s automatic lightweight migration successfully. However, when a particular entity gets created during a migration, I\'d like to populate it with some d

3条回答
  •  南笙
    南笙 (楼主)
    2020-12-12 20:16

    The accepted answer converted to Swift...

      var persistentStoreCoordinator: NSPersistentStoreCoordinator?
      var url: URL
      do {
        let sourceMetadata = try NSPersistentStoreCoordinator.metadataForPersistentStore(ofType: NSSQLiteStoreType, at: url, options: nil)
        if let destinationModel = persistentStoreCoordinator?.managedObjectModel {
          let compatibile = destinationModel.isConfiguration(withName: nil, compatibleWithStoreMetadata: sourceMetadata)
          if !compatibile {
            if let versionHashes = sourceMetadata["NSStoreModelVersionHashes"] as? [String: Any] {
              let sourceEntities = Set(versionHashes.keys)
              let destinationEntities = Set(destinationModel.entitiesByName.keys)
    
              var addedEntities = Set(destinationEntities)
              addedEntities.subtract(sourceEntities)
    
              var removedEntities = Set(sourceEntities)
              removedEntities.subtract(destinationEntities)
              let modelName = (destinationModel.versionIdentifiers.first as? String) ?? ""
              NSLog("Core Data requires a migration to model '\(modelName)'...\nAdded: \(addedEntities)\nRemoved: \(removedEntities)")
            }
          }
        }
      } catch {
                ...
      }
    

提交回复
热议问题