核心数据自定义策略的select器语法是什么?

我正在尝试使用Core Data实现非常基本的自定义迁移。 一个属性最初被创build为Integer 16 ,值为0或1.在新的模型版本中,该属性被更改为Boolean ,下面的迁移策略应该处理它。 我已经看到了几个用Swift编写的例子,他们似乎没有使可访问性打开/公开,或者添加@objc使其可以被Objective-C访问。 我已经这样做了,以消除任何不工作的原因。

我已经使用以下expression式为实体映射创build了具有自定义策略的映射模型。

FUNCTION($entityPolicy, "convertInteger:" , $source.active)

它保持失败,因为select器不被识别。 具体来说,它会得到以下错误。

unrecognized selector sent to instance

我已经尝试了很多变化。

  • convertInteger:
  • 转换(整数:)
  • convertInteger(_ 🙂

我无法获得任何变化的工作。 什么是这个expression式的有效select器?

在Swift代码中,我把一个断言在初始化,它通过,但我不能在策略的expression式中使用相同的select器。

 import CoreData @objc open class IntegerToBooleanMigrationPolicy: NSEntityMigrationPolicy { @objc public override init() { super.init() assert(responds(to: #selector(convert(integer:))), "Policy does not respond to selector!") } @objc open func convert(integer: Int16) -> Bool { debugPrint("Converting \(integer) to boolean") return integer == 1 } } 

将代码片段粘贴到Swift REPL之后,我评估了以下expression式:

 20> #selector(IntegerToBooleanMigrationPolicy.convert(integer:)) $R1: Selector = "convertWithInteger:" 

这表明convertWithInteger:是你应该在映射expression式中使用的select器。