首次启动时重置核心数据

时间:2013-01-15 08:30:56

标签: iphone ios core-data

由于某些原因,我必须在每次应用更新时更新我的​​核心数据模型。

问题是,在每次更新时首次启动(仅在每次更新首次启动时),我想重置我的模型,但我不知道如何继续。

有人曾经遇到过这种问题吗?

提前多多感谢!

2 个答案:

答案 0 :(得分: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 }
}

答案 1 :(得分:0)

使用 NSUserDefaults 设置应用程序是否已更新。如果已更新,则清除应用程序中的核心数据。按此链接重置核心数据:link

更新完成后:

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

然后在启动应用程序时检查相同的值。