LoginSignup
5
3

More than 5 years have passed since last update.

NSManagedObjectのサブクラス作成時のエラー回避

Posted at

はじめに

  • Core Dataでは、NSManagedObjectがエンティティです
  • これをそのまま使うと、KVCによりプロパティ名を文字列で指定するため少し面倒です
  • なので、NSManagedObjectのサブクラスを作って利用することが多いと思います
  • が、Xcode 8で作成しようとするとなぜかエラーになったので、その理由と解決方法をまとめます

検証環境

  • macOS Sierra 10.12.2
  • Xcode 8.2.1

現象

  • これまでどおり、モデルファイルに設定した内容を元にNSManagedObjectのサブクラスを生成します

    Model.png

    CreateSubclass.png

  • クラスは作成されますが、エラーが発生していることがわかります

    • クラス定義が重複してると言われてますね

      Product.png

原因

  • Xcode 8では、NSManagedObjectのサブクラス定義を自動的に行うオプションが追加されました
    • 手動で作成する手間が省けるという点では、歓迎すべき点です
    • ただし、作成したクラスにコードを追加する場合には、これまで通り手作業で行う必要があります
  • 今回は、自動生成が有効になっていたため、手動で生成したものとクラス名が重複していたのが原因です

解決方法

  • モデルエディタに、自動生成するかどうかのオプション(Codegen)が追加されました

    Property.png

  • デフォルトではClass Definitionになっているため、自動生成が有効になっています

  • これをManual/Noneに変えると自動生成は無効になり、これまでどおり自分で生成させることが可能となります

    Codegen.png

まとめ

  • このオプションが追加された件については、公式ドキュメントにも記載があります
  • が、「デフォルトはこれまでどおりだよ」とあったので油断してました
  • エラーが出た際には、Codegenの設定を確認してみてください
5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3