【问题标题】:Core Data Migration custom migrationCore Data Migration 自定义迁移
【发布时间】:2019-04-06 19:28:22
【问题描述】:

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

旧模型有一个属性名称“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 根本没有被打印出来。如果我更改自定义策略名称,它不会给我一个错误,所以看起来好像它被完全忽略了

【问题讨论】:

  • 如果您错过了您链接到的 Tom Harrington 说明中的第 5 步,您的自定义策略实施将被忽略。或者,也许您将自定义策略类名称输入到错误实体的属性检查器中。请检查这些。
  • 该政策已存在且名称正确。
  • 您是否尝试在链接到的说明中添加 @objc 标记,如 noobular 的答案?它不在您发布的代码中。
  • 我试过有无,没有区别。即使我故意在方法名称中打错字,也不会抛出错误

标签: xcode core-data core-data-migration


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2014-10-06
    • 1970-01-01
    • 2021-12-29
    • 2010-12-22
    • 2020-07-01
    • 2012-02-11
    • 2020-10-08
    • 1970-01-01
    • 2011-01-19
    相关资源
    最近更新 更多