コアデータを使用した非常に基本的なカスタム移行を実装しようとしています。 1つのプロパティが最初に0または1の値を持つInteger 16
として作成されました。新しいモデルバージョンでは、このプロパティはBoolean
に変更され、以下の移行ポリシーがそれを処理する必要があります。私はSwiftに書かれたいくつかの例を見てきましたが、アクセシビリティをオープン/パブリックにしたり、Objective-Cにアクセスできるように@objc
を追加したりしていません。私はそれが動作していない理由を排除するためにこれを行っています。コアデータカスタムポリシーのセレクタ構文とは何ですか?
エンティティマッピングのカスタムポリシーを使用して次の式でマッピングモデルを作成しました。
FUNCTION($entityPolicy, "convertInteger:" , $source.active)
セレクタが認識されないので、それは失敗し続けています。具体的には、次のエラーが発生します。
unrecognized selector sent to instance
私は多くのバリエーションを試してみました。
- convertInteger:
- 変換(整数:)
- convertInteger(_ :)
私は仕事にどんな変化を取得することができません。この式の有効なセレクタは何ですか?
スウィフトコードでは、アサーションをイニシャライザに入れてパスしますが、その式の同じセレクタをポリシーに使用することはできません。
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
}
}
これは、式に必要な構文を取得するのに優れています。ありがとう! – Brennan