核心数据迁移自定义迁移
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 作为解决方法,因此需要弄清楚这一点
我正在尝试按照找到的说明进行自定义迁移
旧模型有一个布尔值属性名称 "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 作为解决方法,因此需要弄清楚这一点