はじめに
- Core Dataでは、NSManagedObjectがエンティティです
- これをそのまま使うと、KVCによりプロパティ名を文字列で指定するため少し面倒です
- なので、NSManagedObjectのサブクラスを作って利用することが多いと思います
- が、Xcode 8で作成しようとするとなぜかエラーになったので、その理由と解決方法をまとめます
検証環境
- macOS Sierra 10.12.2
- Xcode 8.2.1
現象
-
これまでどおり、モデルファイルに設定した内容を元にNSManagedObjectのサブクラスを生成します
-
クラスは作成されますが、エラーが発生していることがわかります
原因
- Xcode 8では、NSManagedObjectのサブクラス定義を自動的に行うオプションが追加されました
- 手動で作成する手間が省けるという点では、歓迎すべき点です
- ただし、作成したクラスにコードを追加する場合には、これまで通り手作業で行う必要があります
- 今回は、自動生成が有効になっていたため、手動で生成したものとクラス名が重複していたのが原因です
解決方法
-
モデルエディタに、自動生成するかどうかのオプション(Codegen)が追加されました
デフォルトではClass Definitionになっているため、自動生成が有効になっています
-
これをManual/Noneに変えると自動生成は無効になり、これまでどおり自分で生成させることが可能となります
まとめ
- このオプションが追加された件については、公式ドキュメントにも記載があります
- が、「デフォルトはこれまでどおりだよ」とあったので油断してました
- エラーが出た際には、Codegenの設定を確認してみてください