2012-01-27 2 views
0

私は、永続的なストアを維持するためにコアデータを使用しており、データベースはかなり大きくなる可能性があります。 iPad 1で大規模なデータベースを使用しているユーザーは、iOSがハングしてアプリが終了する前に、プロセスが完了するまで軽量移行を完了しません。iOSでプロセスが強制終了されずにCore Data永続ストアを移行するにはどうすればよいですか?

私がやりたいことは、サーバーが起動するたびに、データベースの移行が必要かどうかを確認することです(NSPersistentStoreCoordinatorでこの方法を見つけることができません)。データベースはアップグレードされ、画面上にスピナーが表示されます。その後、サーバーの始動プロセスが完了すると、その前に進みます。これを行う最善の方法は、サーバーの起動メソッドに - (BOOL)upgradeStoreNeedsUpgradeメソッドを追加するように思われますが、確認する方法が見つかりません。 NSPersistentStoreCoordinatorまたはNSPersistentStoreのメソッドが、指定されたURLのデータベースと特定の管理対象オブジェクトモデルとの互換性をチェックすることはありません。

私のソリューションは正しいですか?その場合、管理対象オブジェクトモデルが特定のURLのSQLiteファイルと互換性があるかどうかを確認するにはどうすればよいですか?

答えて

1

ディスパッチ・ブロックでコア・データ・ライトウェイト・マイグレーション・コードをラップできます。これはバックグラウンドのスレッドに振り向かなければならないので、おそらくあなたのアプリを殺してしまうアプリ起動ウォッチドッグを過ぎることができます。どちらか、またはあなたがメモリからデバイスを実行している。

+0

これはウォッチドッグです。これは受け入れられる解決策ですが、そうするためには、前もって自分のCoreDataStackController(例えば)に、persistentStoreCoordinatorが返さないということを知っておく必要があります。指定されたURL。 – refulgentis

+0

persistantStoreCoordinatorのイニシャライザメソッドにあるエラーをキャッチし、後でそれをディスパッチブロックで処理することができます。 – MobileOverlord

関連する問題