[iOS] CoreDataで.xcdatamodelを別プロジェクトからインポート

2012/09/27

こんにちは。きんくまです。
CoreDataのメモです。

別プロジェクトで作った.xcdatamodeldファイル(EntityやAttribute設定ずみ)を他のプロジェクトにドラッグ&ドロップで持ってきました。
それで読み込んだ方のAppDelegateで読み込むファイル名をそのファイル名に変更しました。

//AppDelegate内
//- (NSManagedObjectModel *)managedObjectModelのところ

    NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"CoreDataTestModel" withExtension:@"momd"];

//- (NSPersistentStoreCoordinator *)persistentStoreCoordinatorのところ

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"CoreDataTestModel.sqlite"];

それでビルドするとエラーがでます。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Cannot create an NSPersistentStoreCoordinator with a nil model'

解決方法

最初、絶対にファイルメニューから新規でxcdatamodelファイルを作って、そこからスタートするのかと思いました。
調べてみたところ、きちんとやり方がありました。

>> iPhone – Add Core Data To existing Project?

Chris Gummerさんによると

・momdファイルはバージョン化されたmomファイル
・外から持ってきたxcdatamodelはまだバージョン化されていないmomファイルの状態
・なので、もしインポートしたいときは.xcdatamodelを選択してEditor > Add Model Versionする
(元コメントはXcode3用?っぽかったのでXcode4だとこうなる)
・Xcodeのファイルメニューから作るxcdatamodelファイルは作成時に自動でバージョン化されている
・もしバージョン化しない場合はmodelを読み込む拡張子をmomdでなくmomにする

バージョン化って何なのかというと、CoreDataのモデリングしてアプリをリリースした後に、
アップデートなどで、例えばEntityやAttributeを追加したいときがあります。
そういうときに、モデリングのバージョンを別バージョンとして定義することが可能です。
古いバージョンから新しいバージョンにするときは、更新というか統合というかそういう作業が必要なのですが、まだ詳しくないのでそこは省略。

今回の場合、ドラッグドロップしたばっかりがこんな感じです。
このときはバージョン化されてない状態なので、拡張子momで読み込み。.xcdatamodelというファイルになっている。

import_model1

それをバージョン化するとこんな感じになります。拡張子momdで読み込み。xcdatamodeld(dが末尾に追加)というファイルになっている
緑のチェックが現在のバージョン

import_model2

さて、これでうまくいくのですが、なんかインポートしただけなのにいらないバージョンがあるというのはどうもいやな感じです。

で、いらないバージョンを削除する方法を調べてみました。

>> How to delete an old/unused Data Model Version in xCode 4

David Avendasoraさんのコメントによると

1. 欲しいバージョンをXcode上でカレントバージョンにセット。

(右側のパネルから)
import_model3

2. .xcdatamodeldをファイルメニューから削除(Remove Reference Only)

3. Finderで.xcdatamodeldを選択して、右クリック > Show Package Contents

4. いらない.xcdatamodelファイルを削除

5. もう一回プロジェクトに.xcdatamodeldを追加

するとXcodeで新規ファイルを作成した状態になっています。
良かった良かった。

import_model4

LINEで送る
Pocket

自作iPhoneアプリ 好評発売中!
フォルメモ - シンプルなフォルダつきメモ帳
ジッピー電卓 - 消費税や割引もサクサク計算!

LINEスタンプ作りました!
毎日使える。とぼけたウサギ。LINEスタンプ販売中! 毎日使える。とぼけたウサギ

ページトップへ戻る