@@ -135,6 +135,41 @@ public class ContextManager: NSObject, CoreDataStack, CoreDataStackSwift {
135135 save ( context, . asynchronously)
136136 }
137137 }
138+
139+ static func migrateDataModelsIfNecessary( storeURL: URL , objectModel: NSManagedObjectModel ) throws {
140+ guard FileManager . default. fileExists ( atPath: storeURL. path) else {
141+ DDLogInfo ( " No store exists at \( storeURL) . Skipping migration. " )
142+ return
143+ }
144+
145+ guard let metadata = try ? NSPersistentStoreCoordinator . metadataForPersistentStore ( ofType: NSSQLiteStoreType, at: storeURL) ,
146+ !objectModel. isConfiguration ( withName: nil , compatibleWithStoreMetadata: metadata)
147+ else {
148+ return
149+ }
150+
151+ DDLogWarn ( " Migration required for persistent store. " )
152+
153+ guard let modelFileURL = Bundle . main. url ( forResource: " WordPress " , withExtension: " momd " ) else {
154+ fatalError ( " Can't find WordPress.momd " )
155+ }
156+
157+ guard let versionInfo = NSDictionary ( contentsOf: modelFileURL. appendingPathComponent ( " VersionInfo.plist " ) ) else {
158+ fatalError ( " Can't get the object model's version info " )
159+ }
160+
161+ guard let modelNames = ( versionInfo [ " NSManagedObjectModel_VersionHashes " ] as? [ String : AnyObject ] ) ? . keys else {
162+ fatalError ( " Can't parse the model versions " )
163+ }
164+
165+ let sortedModelNames = modelNames. sorted { $0. compare ( $1, options: . numeric) == . orderedAscending }
166+ try CoreDataIterativeMigrator . iterativeMigrate (
167+ sourceStore: storeURL,
168+ storeType: NSSQLiteStoreType,
169+ to: objectModel,
170+ using: sortedModelNames
171+ )
172+ }
138173}
139174
140175// MARK: - Private methods
@@ -236,40 +271,6 @@ private extension ContextManager {
236271 return persistentContainer
237272 }
238273
239- static func migrateDataModelsIfNecessary( storeURL: URL , objectModel: NSManagedObjectModel ) throws {
240- guard FileManager . default. fileExists ( atPath: storeURL. path) else {
241- DDLogInfo ( " No store exists at \( storeURL) . Skipping migration. " )
242- return
243- }
244-
245- guard let metadata = try ? NSPersistentStoreCoordinator . metadataForPersistentStore ( ofType: NSSQLiteStoreType, at: storeURL) ,
246- objectModel. isConfiguration ( withName: nil , compatibleWithStoreMetadata: metadata)
247- else {
248- return
249- }
250-
251- DDLogWarn ( " Migration required for persistent store. " )
252-
253- guard let modelFileURL = Bundle . main. url ( forResource: " WordPress " , withExtension: " momd " ) else {
254- fatalError ( " Can't find WordPress.momd " )
255- }
256-
257- guard let versionInfo = NSDictionary ( contentsOf: modelFileURL. appendingPathComponent ( " VersionInfo.plist " ) ) else {
258- fatalError ( " Can't get the object model's version info " )
259- }
260-
261- guard let modelNames = ( versionInfo [ " NSManagedObjectModel_VersionHashes " ] as? [ String : AnyObject ] ) ? . keys else {
262- fatalError ( " Can't parse the model versions " )
263- }
264-
265- let sortedModelNames = modelNames. sorted { $0. compare ( $1, options: . numeric) == . orderedAscending }
266- try CoreDataIterativeMigrator . iterativeMigrate (
267- sourceStore: storeURL,
268- storeType: NSSQLiteStoreType,
269- to: objectModel,
270- using: sortedModelNames
271- )
272- }
273274}
274275
275276extension ContextManager {
0 commit comments