2017-06-19 5 views
2

コアデータを使用した非常に基本的なカスタム移行を実装しようとしています。 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 
    } 

} 

答えて

8

はスウィフトREPLにあなたのコードスニペットを貼り付けた後、私は次の式を評価:

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

convertWithInteger:ことを示唆しているあなたはマッピング式で使用する必要があるセレクタです。

+0

これは、式に必要な構文を取得するのに優れています。ありがとう! – Brennan

関連する問題