首页 > 解决方案 > Core Data Migration 自定义迁移

问题描述

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

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

我有一个名为“V2V3.xcmapingmodel”的映射模型,其中实体有一个自定义策略集“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 的值时,我得到了 nil。该函数上的 NSLog 根本没有被打印出来。如果我更改自定义策略名称,它不会给我一个错误,所以看起来好像它被完全忽略了

标签: xcodecore-datacore-data-migration

解决方案


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

他们还说映射运行不正确,因为它与“发送到实例的无法识别的选择器”崩溃,即使它是正确的,这是一个错误。

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


推荐阅读