2日前に私はAppをリリースしました。 itunesconnectからのAppStoreとクラッシュレポートのフィードバックによると、起動時に多くのクラッシュが発生します。しかし、100%のユーザーが苦しんだわけではなく、わずか30%しか苦しんでいませコアデータ軽量移行がアプリのアップデート後にクラッシュする
クラッシュログを読んで問題が発生しました。それは、DBの移行プロセスでクラッシュしています。データベースの軽量移行を使用します。 通常、私は新しいデータモデルのバージョンを非常に慎重に追加します。各リリースの前に、私は以前のバージョンのAppをインストールして、それをしばらく使ってから、その上に最新バージョンをインストールします。今回もそうだった。
私は2つのデータモデル(前と現在)を調べました。追加されました:
1)新しいエンティティ(軽量の移行では問題ありません)
2)既存のエンティティ内に新しいフィールドが追加されました。これらはすべてオプションです。 (軽量マイグレーションの場合はOK)
3)既存のエンティティの1つの新しいフィールド。オプションでインデックスを作成しました。
既存のフィールドとエンティティの名前が変更されていません。
どうしたのですか?
スタックトレース:
Thread 0 name: Dispatch queue: com.apple.main-thread
Thread 0:
0 libsystem_kernel.dylib 0x352f439c pread + 20
1 libsqlite3.dylib 0x30d2d632 unixRead
2 libsqlite3.dylib 0x30d4221a readDbPage
3 libsqlite3.dylib 0x30d41156 sqlite3PagerAcquire
4 libsqlite3.dylib 0x30d583be moveToChild
5 libsqlite3.dylib 0x30d8e0e8 moveToLeftmost
6 libsqlite3.dylib 0x30d59582 sqlite3BtreeNext
7 libsqlite3.dylib 0x30d54328 sqlite3VdbeExec
8 libsqlite3.dylib 0x30d4f6c2 sqlite3_step
9 CoreData 0x329e8e2e _execute
10 CoreData 0x329e8d64 -[NSSQLiteConnection execute]
11 CoreData 0x32a8bd54 -[NSSQLConnection prepareAndExecuteSQLStatement:]
12 CoreData 0x32add63c -[_NSSQLiteStoreMigrator performMigration:]
13 CoreData 0x32ad42b8 -[NSSQLiteInPlaceMigrationManager migrateStoreFromURL:type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error:]
14 CoreData 0x32a79c02 -[NSMigrationManager migrateStoreFromURL:type:options:withMappingModel:toDestinationURL:destinationType:destinationOptions:error:]
15 CoreData 0x32ac5bf4 -[NSStoreMigrationPolicy(InternalMethods) migrateStoreAtURL:toURL:storeType:options:withManager:error:]
16 CoreData 0x32ac519c -[NSStoreMigrationPolicy migrateStoreAtURL:withManager:metadata:options:error:]
17 CoreData 0x32ac6b58 -[NSStoreMigrationPolicy(InternalMethods) _gatherDataAndPerformMigration:]
明らかにチェーンはなく、遷移V_n-1 - > V_nのみでした。 あなたは間違っていると思います。コアデータは、ステップバイステップ移行を使用して、V1からVnにデータを移行できます。 –
私が間違っているかわからない:http://stackoverflow.com/questions/1557344/core-data-migration-across-multiple-version-upgrades and http://forums.pragprog.com/forums/90/topics/3175 。それにかかわらず、あなたがモデルの2回転だけを持っていれば、それはあなたの問題ではありません。私は、踏み込んだマイグレーションがあなたのために魔法のように起こると仮定することには注意が必要です。私は個人的にそれが失敗するのを見ました。 –
私の経験では、段階的な移行はシステムと戦っているため、すべてのコストをかけて回避する必要があります。 – trapper