核心数据迁移自定义迁移

Core Data Migration custom migration

我正在尝试按照找到的说明进行自定义迁移 ,更改属性名称和类型,但它似乎不是 运行 映射。

旧模型有一个布尔值属性名称 "roundDrill"。新模型删除了这个,并添加了一个名为 "drillType" 的新属性,它是一个字符串。

我有一个名为 "V2V3.xcmappingmodel" 的映射模型,其中实体具有自定义策略集 "Diamond_Painting_Logbok.V2V3"。新属性的值为 "FUNCTION($entityPolicy, "roundToType:" , $source.roundDrill)"

在 "V2V3.swift" 我有下面的代码

import UIKit
import CoreData

class V2V3: NSEntityMigrationPolicy {
    func roundToType(isRound:NSNumber) -> String {
        NSLog("Round: \(isRound)")
        if isRound.boolValue {
            return "Round"
        } else {
            return "Square"
        }
    }
}

当我打印出 drillType 的值时,结果为零。 函数上的 NSLog 根本没有被打印出来。如果我更改自定义策略名称,它不会给我一个错误,所以看起来好像它被完全忽略了

所以我在与苹果交谈后找到了问题的原因,因为我没有 V1 到 V2 型号,只有 V2 到 V3。没有它,所有映射模型都会被忽略,

他们还说映射不 运行 正确,因为它与 "unrecognized selector sent to instance" 崩溃,即使它是正确的,这是一个错误。

他们建议使用 createDestinationInstances 作为解决方法,因此需要弄清楚这一点