轉至 : http://d.hatena.ne.jp/watanata2000/20100711/1278837861
CoreData を試して最初につまずいたのがこれ。1個エンティティを追加しただけなのに、いきなりエラーかよ(怒)!
2010-07-10 13:42:23.939 Locations[1817:207] Unresolved error Error Domain=NSCocoaErrorDomain Code=134100 "The operation couldn’t be completed. (Cocoa error 134100.)" UserInfo=0xb32a1b0 {metadata=<CFBasicHash 0xb32e680 [0x2631380]>{type = immutable dict, count = 6, entries => … 中略 , reason=The model used to open the store is incompatible with the one used to create the store}, { metadata = { NSPersistenceFrameworkVersion = 320; NSStoreModelVersionHashes = { Event = <b149c3fa 1711a8fe 24dab332 baf5c924 858e8e30 3574ff64 6a687785 51c70a52>; }; NSStoreModelVersionHashesVersion = 3; NSStoreModelVersionIdentifiers = ( ); NSStoreType = SQLite; NSStoreUUID = "CC15632C-1672-41DB-AD97-1E8499E78922"; }; reason = "The model used to open the store is incompatible with the one used to create the store"; } プログラムはシグナルを受信しました:“SIGABRT”。 (gdb)
エラー原因
マイグレーション処理が必要なのに、そのまんま実行しようとしてること。マイグレーション方法は ”Core Data Model Versioning and Data Migration Programming Guide” に書いてあるとのこと。
そもそもエラーが返された理由も「スキーマを変更するとデータが壊れやすいから、ちゃんとマイグレーション処理をしましょう」ってことだったらしい。ハイ、そのとおりです。僕が悪かったです。怒ってすみません。早めに覚えます。φ(.. ;)
応急処置
とはいえ、初心者としてはいろいろ覚えることが多くて大変なので、思いついた簡単な逃げ方。
そもそも、はじめてアプリが起動されたときに作られた *.sqlite ファイルと、スキーマ変更後の情報がミスマッチするのが原因っぽい。なので、一度、アプリを削除すると *.sqlite を含むアプリデータが全てが削除され、Xcode で再実行時に作り直されるので、とりあえず問題解決?という理屈。う~ん、我ながら場當たり対処だ。:-p
iPhone シミュレータの場合 *.sqlite は↓のところに格納されてるので、削除前に *.sqlite のバックアップはとっておいてくださいね。トラブルがあっても責任は負えないので、自己責任でお願いしますよ。:-)
$HOME/ライブラリ/Application Support/iPhone Simulator/<version>/Application/<app_dir>/Documents/<app_name>.sqlite