由于某些原因,我必须在每次应用更新时更新我的核心数据模型。
问题是,在每次更新首次启动时(仅在每次更新首次启动时),我想重置我的模型,但我不知道如何继续。
有人遇到过这种问题吗?
非常感谢提前!
您是否启用了 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 }
}
使用NSUserDefaults设置应用程序是否更新。如果更新,则从应用程序中清除核心数据。按照此链接重置核心数据:链接
更新完成后:
[[NSUserDefaults standardUserDefaults]setBool:TRUE forKey:@"isUpdated"]
然后在启动应用程序时检查相同的值。