4. 自定义手动迁移
手动迁移的重点就是 「你可以自定义一个 MigrationPolicy」,迁移策略是自定义迁移的最核心的一个类,实现一个 NSEntityMigrationPolicy
的子类来允许你自定义实现一些 Swift 代码来控制 Entity 实体迁移的时候的逻辑。
官方文档中,这么描述:
NSEntityMigrationPolicy 的实例为一个实体映射自定义的迁移策略。
New file 创建你自己的一个 .swift 类,命名:OldEntityNameToNewEntityNameMigrationPolicyV2toV3
。
import CoreData
import UIKit
let errorDomain = "Migration"
class OldEntityNameToNewEntityNameMigrationPolicyV2toV3: NSEntityMigrationPolicy {
}
Mapping Model 中选择对应的 Entity Mapping,然后在 Xcode 右侧找到 Custom Policy,设置成你刚自己创建的这个 Policy 的子类。
当你设置了这个自定义迁移策略的时候,Core Data 再去做迁移的时候,当迁移到跟你设置的这个相关的数据的时候,就会使用你的这个迁移策略,然后你怎么去干预呢,通过下面的这些方法来做:
NSEntityMigrationPolicy 中目前是空的,目前有几个方法可以进行重写
-
迁移即将开始的时候:
func beginEntityMapping(mapping: NSEntityMapping, manager: NSMigrationManager, error: NSErrorPointer) -> Bool
-
在旧数据基础上创建新的实例的时候调用:
func createDestinationInstancesForSourceInstance(sInstance: NSManagedObject, entityMapping mapping: NSEntityMapping, manager: NSMigrationManager, error: NSErrorPointer) -> Bool
-
2结束的时候:
func endInstanceCreationForEntityMapping(mapping: NSEntityMapping, manager: NSMigrationManager, error: NSErrorPointer) -> Bool
-
创建新的relationship实体之间关系的时候调用:
func createRelationshipsForDestinationInstance(dInstance: NSManagedObject, entityMapping mapping: NSEntityMapping, manager: NSMigrationManager, error: NSErrorPointer) -> Bool`
-
4结束的时候:
func endRelationshipCreationForEntityMapping(mapping: NSEntityMapping, manager: NSMigrationManager, error: NSErrorPointer) -> Bool
-
验证 保存数据的时候:
func performCustomValidationForEntityMapping(mapping: NSEntityMapping, manager: NSMigrationManager, error: NSErrorPointer) -> Bool
-
迁移结束的时候调用:
func endEntityMapping(mapping: NSEntityMapping, manager: NSMigrationManager, error: NSErrorPointer) -> Bool
网友评论