1. hanoopy

    Posted

    hanoopy
Changes in title
+【SwiftでCoreDataを使う】NSDataObjectSubclassを作っても、Entityが「Class not found」になるとき
Changes in tags
Changes in body
Source | HTML | Preview
@@ -0,0 +1,41 @@
+
+### エラー概要
+
+SwiftでCoreDataにアクセスする処理を書いて実行すると、下記のようなエラーになった。
+> CoreData: warning: Unable to load class named 'SampleEntity' for entity 'SampleEntity'. Class not found, using default NSManagedObject instead.
+
+![エクスプローラ](http://i.gyazo.com/00b4646743be6834f8fa77229ab29bf4.png)
+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」に設定するという説明がある。
+![](http://i.gyazo.com/36c2abe42662e809fe09bae7d4a4739c.png)
+
+
+
+これを参考にして、自分のXcode上でやってみる。
+
+
+
+![ad53c98a78af656ecbe19886b872884d.png](https://qiita-image-store.s3.amazonaws.com/0/28556/868d07c2-e93b-232f-153e-f91187801143.png "ad53c98a78af656ecbe19886b872884d.png")
+(1)左ペインで「.xdatamodeld」ファイルを選択、(2)「ENTITIES」から該当のエンティティを選択、(3)右ペインで「Show model inspector」を選択、(4)「Entity」の「Class」名入力欄を表示させる。ここで
+**「SampleEntity」→「CoreDataaSample.SampleEntity」**
+に変更する。
+
+修正後の動作状況
+![](http://i.gyazo.com/42fe1d47c53f307c7e71a01d1df69fb2.gif)
+
+
+### 前提条件
+元々のプログラムは、下記のサイトを参考にさせて頂きました。
+http://hidef.jp/post-652/
+更に元々は、新プロジェクト作成のサンプル「Master-Detail Application」である。
+
+これって「.xdatamodeld」ファイルもGUIで作成したし、NSDataObjectSubclassクラスも自動生成だ。Xcodeの自動生成時のバグじゃないの。
+
+### ソース
+アップしました。
+https://github.com/hanoopy/CoreDataaSample