1

いくつかの理由で、アプリを更新するたびにコアデータモデルを更新する必要があります。

問題は、すべてのアップデートの最初の起動時(すべてのアップデートの最初の起動時のみ)に、モデルをリセットしたいのですが、続行する方法がわかりません。

誰かがこのような問題を抱えたことはありますか?

よろしくお願いします!

4

2 に答える 2

2

永続ストアの移行を有効にしましたか?些細なモデルの変更のみを行っている限り、自動移行はデータをリセットする必要がないことを意味します。

 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 }
}
于 2013-01-15T10:32:22.240 に答える
0

NSUserDefaultsを使用して、更新されているかどうかに関係なくアプリケーションを設定します。更新されている場合は、アプリケーションからコアデータをクリアします。次のリンクに従って、コアデータをリセットします

更新が完了したら:

[[NSUserDefaults standardUserDefaults]setBool:TRUE forKey:@"isUpdated"]

次に、アプリケーションを起動するときに同じ値を確認します。

于 2013-01-15T08:37:43.030 に答える