2017-02-22 3 views
0

問題:互換性のないCoreDataストアは常にクラッシュを引き起こしますか?

我々は最近、我々のアプリにCoreDataを導入し、以前に不完全CoreDataのモデルとバージョンをリリースしました。その出荷されたバージョンでは、データをsqliteデータベースに書き込むコードを実装したことはなく、モデルのみが実装されました。

私たちの内部テストでは、デバイスを出荷済みの不完全モデルに戻し、新しいモデルに更新し、移行を実行する必要はなく、互換性のないストア例外も発生しませんでした。

しかし、私たちのベータテストでは、互換性のないストアが原因でクラッシュしている既存のユーザーを特定しましたが、一部の既存ユーザーはそうではありませんでした。

質問:

互換性のない店舗が常にクラッシュを引き起こすんし、そうであれば、旧バージョンから別のCoreDataモデルに更新する際に、なぜ我々はクラッシュを体験しませんか?

最新のCoreDataモデルに変更を加えると、互換性のないストアエラーが発生することに言及する必要がありますが、コアデータモデルの非常に基本的なバージョンに戻すと、この例外はスローされません。

+0

あなたがcoredataを変更したとき、古いビルドを削除して、古いビルドを使用すると新しいビルドを使用しなければならないので、クラッシュする可能性があります。 –

+0

を見てください:https://www.raywenderlich.com/27657/how-to-perform-a-lightweight-core-data-migration – raki

+0

インストールする前にデバイスのアプリを削除すると、それはないCoreDataスキーマが競合するため、クラッシュは発生しません。テストユーザーが別のCoreDataスキーマを持つ新しいバージョンのアプリを使用する前にデバイスからアプリを削除しなかった場合、スキーマの競合によってクラッシュが発生します。 – Zhang

答えて

0

あなたは[はい、互換性のない店舗CoreDataとあなたのセットアッププロジェクトが常に発生しますときに、自動的にXcodeのことで追加され、プロジェクト

[__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
                configuration:nil 
                   URL:storeURL 
                  options:nil 
                  error:&error]) 

コードで呼ばれる次のコード行を持っている場合は、あなたの質問に答えるためにあなたのケースに応じて、軽いマイグレーションや重いマイグレーションをしない限り、クラッシュしないでください。

軽いマイグレーションはかなり簡単で簡単ですが、いくつかのルールを尊重する必要があります。光の移行のためには、に上記のコード行を変更する:あなたはdeveloper.apple

に軽量な移行の詳細を確認することができます

[__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType 
                 configuration:nil 
                    URL:storeURL 
                   options:@{NSMigratePersistentStoresAutomaticallyOption:@YES, NSInferMappingModelAutomaticallyOption:@YES} 
                   error:&error]) 

また、あなたはコメントで@rakiにより投稿されたリンクをチェックアウトする必要があります。

+0

ありがとう、danypata。出荷された不完全なコアデータビルドを振り返ってみると、永続的なストアコーディネータを宣言するコードがありますが、これは決して呼び出されません。これが、一部のユーザーにクラッシュが表示されるのはなぜですか。すべてではありませんか? 私たちの行動計画は、永続ストア(互換性がない場合)を完全に削除し、新しいストアを作成し、移行が重くなる可能性があるため、サーバーからデータをロードすることです。ローカルデータを外部サーバと同期させているので、コードはプラグアンドプレイです。このアプローチの考え方は? –

+0

コードが呼び出されないとクラッシュする理由が分かりません。つまり、コアデータがまったく設定されていない場合、クラッシュが他の場所から発生している可能性があります。永続的なストアを再作成することについては、私の意見では、コアデータ関係(1対多、多対多)を使用しないと、すべてのデータをあなたのサーバー。また、コアデータのためのより良い代替手段はRealm(チェックアウト)であり、信じられないほど速いですが、コアデータのように移行を処理する必要があります。実際には、ある種の移行を要求しないキャッシュ方法はないと思います。 – danypata

関連する問題