2

まず、私は Core Data について 100% 把握しているわけではありませんが、できる限りのことをしています。そこで、アプリ更新時のライトウェイト マイグレーションを実装したのですが、最近これが失敗しており、ローカル DB にアクセスしようとするとアプリがクラッシュしてしまいます。現在、その理由はモデルのバージョンとの混同が原因であると想定していますが、そうでなくても、私の質問はまだ有効だと思います:

アプリを更新/アップグレードするときに、コア データの移行プロセスを無視して、ローカル ユーザー データが削除されたとしても、アプリに強制的に最新のモデル バージョンを使用させる方法はありますか?

私の計画では、移行が失敗した場合は、デバイスに最新バージョンを強制的に適用します。それはクラッシュするアプリよりも優れたソリューションです

4

1 に答える 1

2

移行はaddPersistentStoreWithType通話中に行われます。それが失敗し、新しい空のデータベースで開始したい場合は、永続ストア ファイルを削除して、addPersistentStoreWithTypeもう一度呼び出します。

_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:model];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
    [[NSFileManager defaultManager] removeItemAtURL:storeURL error:NULL];
    if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        // Handle fatal error
    }
}

これは、モデルを変更するたびにアプリを削除する必要がないため、開発中にも役立ちます。

于 2013-11-11T08:07:20.080 に答える