2009-11-21 5 views
5

2つの異なるSQLiteストアを追加するマネージオブジェクトコンテキストがあります。私はMananged Object ModelのConfigurationsを使用して、特定のエンティティをあるストアに割り当て、他のエンティティを他のエンティティに割り当てます。構成は、「UserDB」および「MainDB」と呼ばれます。Core Data Migrationエラーメッセージ "'モデルにコンフィグレーション' XYZ 'が含まれていません。' '

自動移行を使用しようとするまで、すべて正常に機能します。新しいマネージドオブジェクトモデルのバージョンを作成し、UserDB Configurationのエンティティの1つに新しい属性を追加した後、古いバージョンストア(UserDB関連ストア用)をストアコーディネータに追加するときに例外が発生します。設定 'UserDB'が含まれています。 ' Googleでこのエラーのヒットは見つかりません。誰もが複数の店舗を使用して構成していますか?誰かが私が間違っているかもしれないアイデアを持っていますか?

スタックは、次のようになります。

objc_exception_throw 
-[NSManagedObjectModel isConfiguration:compatibleWithStoreMetadata:] 
-[NSStoreMigrationPolicy sourceModelForStoreAtURL:metadata:error:] 
-[NSStoreMigrationPolicy(InternalMethods) _gatherDataAndPerformMigration:] 
-[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:] 
-[MyAppDelegate persistentStoreCoordinator] 
+0

この問題も同様です。移行マップを作成するときも同じことが起こりますか? – pokstad

答えて

11

これは、移行+構成のバグのように見えます。私はaddPersistentStoreWithTypeを呼び出すときに、同じ動きをして、設定にnilを渡すことで問題を回避することができました。移行が行われた後、新しい永続ストアコーディネータを作成して、適切なConfiguration文字列引数を使用してストアを再度追加できます。

これは私が実行した2番目の構成に関するバグです。明らかに十分にテストされた機能ではない。

+0

これを投稿していただきありがとうございます。これは確かに私の問題でした。 – awolf

+0

ありがとう、これは私のために働いたようだ。 – futureshocked

+0

うん、これほど久しぶりにこれと闘ってきました。このソリューションは「ほぼ」機能します。しかし、タイミングの問題が付いているように見えます。つまり、実行を十分に長くすると、時にはうまく動作しません。 –

0

私は同じ問題を抱えていました。ファクトパターンは同一で、エラーメッセージは同じです。しかし、それは私の間違いの結果であることが判明しました。

古いモデルがBlah.xcdatamodelと新しいBlah 2.xcdatamodelだったとしましょう。私は間違いを認識してBlah 2を作成する前に、Blahを変更し始めました。私はバージョン管理システム(Git)を使って古いBlahに戻し、その後Blah 2を再作成しました。しかし、復帰プロセスで何か問題があったに違いない。私の現在のプロジェクトフォルダのBlah.xcdatamodelが、プロジェクトフォルダのBlah.xcdatamodelと本当に同じであることを二重チェックすると、以前のバージョンのアプリケーションをビルドした(バージョン管理システムを完全には信用していないので、幸い私は常に、リリースされた各バージョンのプロジェクトフォルダをzip形式でアーカイブしています)、Xcodeでは同じであるとはいえ、実際には異なっていました。たとえば、ファイルサイズは異なります。

私は現在のプロジェクトフォルダに古いBlahを置き換えて、Kenが説明した回避策を必要とせずにすべてが完璧になったのを見ています。

ケンは必然的に同様の誤りを犯したとは言いませんが、このメッセージが表示された場合、マイグレーション元のモデルが本当に問題のデータを作成するために使用されたモデルであることを確認する価値があります。

+0

私はそれ以来、この問題は実際には解決されていないことが判明しました。実際にデータが初めてマイグレーションされたために2回目の作業が行われたようです。つまり、初めてデータを実行するとデータは移行されますが、「モデルには構成 'XYZ」というメッセージが含まれていないため、アプリケーションが失敗します。その後、2回目は正常に動作します。もちろんこれはユーザーエクスペリエンスが優れていないため、Kenのような2段階のアプローチをとる必要がありました。 – jfewtr

+0

さらに、この2段階アプローチには、少なくとも私にとっては問題があります。つまり、ユーザーがデータを移行した後に別のアプリケーションに切り替える最初の(そして初めての)時間です。私はこれを別の質問に入れます。 – jfewtr