データが豊富なアプリケーションがあり、XCodeのビジュアルマッピングモデルとクリーンアップコードのNSEntityMigrationPolicy実装を使用して、CoreDataのすべての移行処理を実装しました。実際のデバイス上での移行は実際には時間がかかるため、完了までに最大で5分かかることがあります。自動移行でNSMigrationManagerへの参照を取得する最速の方法は?
これが起こっているときに私は実際にユーザーにフィードバックを与え、NSMigrationManagerのmigrationProgress
属性をKVOにしたいと考えています。そのトリックは、addPersistentStoreWithType:configuration:URL:options:error:
は、マイグレーションが必要であると判断した場合にNSMigrationManagerへの参照を取得させないということです。
カスタムNSEntityMigrationPolicyにbeginEntityMapping:manager:error:
コールバックを実装してNSMigrationManagerへの参照を取得できることが判明しました。
唯一の問題は、(また、この30%は、典型的には約半分合計時間を表しaddPersistentStoreWithType
へのコールの内側に過ごしたあなたはbeginEntityMapping
コールに着くまでに、進捗状況は約30%までのようだということですだから実際はそれよりも悪いと思う)。
NSMigrationManagerへの参照を手掛かりにするために使うことができる技を知っている人は誰もいないので、ユーザにフィードバックを与える機会の最初の3分の1を逃す必要はありませんなぜアプリケーションが起動するまでに時間がかかるのですか?
ありがとうございました!
軽いマイグレーションで実際にはうまくいくのですか?推測マッピングを使用した「手動」マイグレーションを実装しましたが、事実上軽量マイグレーションですが、進歩は常に0.0。(成功したmiの後でさえgration) –
iOS 6についてはわかりませんが、iOS 5以前では、軽量移行による進捗状況についてのフィードバックは得られません。かなり悪いですし、あなたができる最善の方法は、事前にプロファイリングし、DBのサイズに基づいていくつかの見積もりを得て、それから進捗状況をシミュレートすることです。しかし、それは実際の進歩ではなく、単なる見積もりではありません。 – glenc
iOS6でテストしましたが、NSMigrationManagerを使用して手動で移行を開始すると、 "migrationProgress"は常に0.0になります。 "-addPersistentStoreWithType:..."についてはわかりませんが、あなたが指摘しているように、この場合は移行マネージャへの参照を実際に取得できません。 –