いくつかの理由で、アプリを更新するたびにコアデータモデルを更新する必要があります。
問題は、すべてのアップデートの最初の起動時(すべてのアップデートの最初の起動時のみ)に、モデルをリセットしたいのですが、続行する方法がわかりません。
誰かがこのような問題を抱えたことはありますか?
よろしくお願いします!
永続ストアの移行を有効にしましたか?些細なモデルの変更のみを行っている限り、自動移行はデータをリセットする必要がないことを意味します。
NSError *error = nil;
_persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:nil
URL:storeURL
options:@{
NSMigratePersistentStoresAutomaticallyOption:@YES,
NSInferMappingModelAutomaticallyOption:@YES,
NSSQLiteAnalyzeOption:@YES,
}
error:&error])
モデルをクリアする別の理由がある場合は、それNSUserDefaults
が進むべき道です。#defineを使用してバージョン番号を設定し、番号が異なる場合は永続ストアをリセットし、空のストアを必要とする変更を行ったことがわかっている場合は、#defineをインクリメントできます。
#define kNukeTheCache 1000
...
NSNumber *nukeNumber = [[NSUserDefaults standardUserDefaults] objectForKey:nukemeKey];
if ((nukeNumber == nil) || (nukeNumber.integerValue < kNukeTheCache)) {
[self deletePersistentStore:storeURL];
}
[[NSUserDefaults standardUserDefaults] setInteger:kNukeTheCache forKey:nukemeKey];
[[NSUserDefaults standardUserDefaults] removeObjectForKey:totalNuke];
[[NSUserDefaults standardUserDefaults] synchronize];
- (void)deletePersistentStore:(NSURL *)storeURL
{
NSError *error = nil;
[[NSFileManager defaultManager] removeItemAtURL:storeURL error:&error];
if (error) { // Handle error }
}
NSUserDefaultsを使用して、更新されているかどうかに関係なくアプリケーションを設定します。更新されている場合は、アプリケーションからコアデータをクリアします。次のリンクに従って、コアデータをリセットします。
更新が完了したら:
[[NSUserDefaults standardUserDefaults]setBool:TRUE forKey:@"isUpdated"]
次に、アプリケーションを起動するときに同じ値を確認します。