LoginSignup
0
0

More than 5 years have passed since last update.

【Swift】CoreDataでクラスの二重登録のワーニングの解決方法

Posted at

 こんなのは使い慣れていれば出ないワーニングだとは思うのですが、ようやく理解し始めて放ってあったのを治したので、メモしておきます。

CoreDataを使うでチェックをいれて生成したxcdatamodeldファイルでエンティティを追加して、クラスを作るとします。
自動生成されるクラスのターゲットは基本的にプロジェクトのメインアプリになっていると思います。
(Properties.swiftやDataClass.swiftを選択して、右側のfileinspectorのTarget Membershipで確認できます)

で、Embedded Frameworksなんかでライブラリを追加して、そっちの方でCoreDataのラッパークラスやデータ処理のクラスなんかを作ってエンティティを使おうとして、ライブラリもターゲットに追加してシミュレータで動かすと

Class ”エンティティ名” is implemented in both
(シミュレータ上のフレームワークのパスと、CoreDataシミュレータのパスが表記される)
One of the two will be used. Which one is undefined.

となります。
もうわかってると思いますが、Target Membershipでメインアプリとフレームワークで両方ターゲットに入っているのが問題になってます。
私の場合は、ですが、フレームワーク側でしか直接エンティティのメンバーに触らないので、ターゲットからメインアプリを外したことでこのワーニングが解消されました。

ちなみに
ファイルを生成しないでやると、今度は実行時に

CoreData: warning: Unable to load class named 'エンティティ名' for entity 'エンティティ名'. Class not found, using default NSManagedObject instead

が出ます。これは自動生成したやつでいいからプロジェクトに登録してあげればいいだけです。

どっちのワーニングも、動くことは動くんですけどね。わかってしまえばただの凡ミスなんですけど、周りに経験者がいないとわかるまで時間がかかるんですよね…。

0
0
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
0
0