【问题标题】:Reset core data at first launch首次启动时重置核心数据
【发布时间】:2013-01-15 08:30:55
【问题描述】:

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

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

有人遇到过这种问题吗?

提前非常感谢!

【问题讨论】:

    标签: iphone ios core-data


    【解决方案1】:

    您是否启用了 Persistent Store 迁移?只要您只是进行微不足道的模型修改,自动迁移就意味着您不需要重置数据。

     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 }
    }
    

    【讨论】:

    • 我只是来实施您的解决方案,它对我有用。非常感谢!
    【解决方案2】:

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

    更新完成后:

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

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

    【讨论】:

    • 好的,所以我必须设置一个变量(布尔)具有一定的值(true),然后在第一次运行后将其更改为(false)?
    • 好的,我明白了。问题是我需要在每次应用更新时只重置一次核心数据,或者如果我在 NSUserDefaults 中设置了一个新变量,则该变量将在下一次应用更新时设置(NSUserDefaults 在应用更新时不会重置)。跨度>
    • 应用更新是什么意思?是在更新应用数据吗?
    • 不是,我的意思是,在设备上部署新版本的应用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    • 2016-07-16
    相关资源
    最近更新 更多