将应用程序更新到App Store时清理核心数据

时间:2014-01-13 11:19:30

标签: objective-c core-data core-data-migration

我一直在使用轻量级迁移来更新数据模型。我想发布一个清理数据库但不迁移数据的版本。最好的方法是什么?有人在App Store上发布了这个吗?

更新

NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption: @NO,
                         NSInferMappingModelAutomaticallyOption: @NO};

NSError *error = nil;
__persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];

if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {

    if (![[NSUserDefaults standardUserDefaults] valueForKey:kCleanDB]) {
        NSLog(@"Deleting sql database, due to unresolved error %@, %@", error, [error userInfo]);

        [[NSFileManager defaultManager] removeItemAtPath:storeURL.path error:&error];
        [[NSUserDefaults standardUserDefaults] setValue:[NSNumber numberWithBool:YES] forKey:kCleanDB];
    }

    if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

1 个答案:

答案 0 :(得分:2)

您需要做的就是在创建托管对象上下文之前删除启动时的持久存储。

如果您使用Apple的标准模式来创建Core Data堆栈,那么当您访问MOC时,它将创建一个新的空库。

您需要跟踪是否已完成此“升级”。要做到这一点,只需在NSUserDefaults完成后存储一个标记,并每次检查以确保只执行一次。