iOS
Swift
Xcode6

【SwiftでCoreDataを使う】NSDataObjectSubclassを作っても、Entityが「Class not found」になるときの解決策

More than 3 years have passed since last update.


エラー概要

SwiftでCoreDataにアクセスする処理を書いて実行すると、下記のようなエラーになった。


CoreData: warning: Unable to load class named 'SampleEntity' for entity 'SampleEntity'. Class not found, using default NSManagedObject instead.


エクスプローラ

SampleEntity.swiftファイルがプロジェクト上にあり、SampleEntityクラスも作成済みである。


解決策

http://stackoverflow.com/questions/25076276/unabled-to-find-specific-subclass-of-nsmanagedobject

質問サイトの中で下記ドキュメントが示されている。

https://developer.apple.com/library/mac/documentation/Swift/Conceptual/BuildingCocoaApps/WritingSwiftClassesWithObjective-CBehavior.html

ドキュメントで「Entity」でページ内検索すると、ヒットした箇所に、Xcode上でエンティティのClassについて、「Name:Person、Class: MyCoreDataApp.Person」に設定するという説明がある。

これを参考にして、自分のXcode上でやってみる。

ad53c98a78af656ecbe19886b872884d.png

(1)左ペインで「.xdatamodeld」ファイルを選択、(2)「ENTITIES」から該当のエンティティを選択、(3)右ペインで「Show model inspector」を選択、(4)「Entity」の「Class」名入力欄を表示させる。ここで

「SampleEntity」→「CoreDataaSample.SampleEntity」

に変更する。

修正後の動作状況


前提条件

元々のプログラムは、下記のサイトを参考にさせて頂きました。

http://hidef.jp/post-652/

更に元々は、新プロジェクト作成のサンプル「Master-Detail Application」である。

これって「.xdatamodeld」ファイルもGUIで作成したし、NSDataObjectSubclassクラスも自動生成だ。Xcodeの自動生成時のバグじゃないの。


ソース

アップしました。

https://github.com/hanoopy/CoreDataaSample