iOS 核心数据轻量级迁移
Posted
技术标签:
【中文标题】iOS 核心数据轻量级迁移【英文标题】:iOS core data lightweight migration 【发布时间】:2012-12-12 17:53:20 【问题描述】:我遇到了核心数据轻量级迁移的问题。 带有第一个模型版本的应用程序已提交到 AppStore。 然后是版本 2 的数据模型(未提交)。 最后经过一些更改,我添加了模型的第 3 版并将其提交到 AppStore。
在测试设备上一切正常,因为迁移是逐步完成的 (v1 - v2 - v3)。
但它不适用于从 AppStore 更新应用程序的用户,例如它试图从版本 1 迁移到最高版本 3(跳过版本 2)。
我该如何解决这个问题? 谢谢。
【问题讨论】:
你用的是subversion或者git这样的系统控制版本吗? 【参考方案1】:这是一个蛮力解决方案,但删除商店是解决您问题的一种选择:
// Setup CoreData with MagicalRecord && remove CoreData store
// The flag is used to perform the delete just once
if (![[NSUserDefaults standardUserDefaults] boolForKey:@"CORE_DATA_FLAG01"])
NSURL *storeURL =[NSPersistentStore MR_urlForStoreName:@"YourStore.sqlite"];
LOG(@"%@", storeURL);
NSFileManager *fm = [[NSFileManager alloc] init];
NSError *error = nil;
[fm removeItemAtURL:storeURL error:&error];
if (error)
LOG(@"error %@", error);
else
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"CORE_DATA_FLAG01"];
我正在使用 MagicalRecord 与 CoreData 进行交互。在这种情况下,我使用该函数来获取商店。
【讨论】:
仅供参考,LOG
是一个在我处于调试模式时执行 NSLog
的宏。【参考方案2】:
通过轻量级迁移,如果 V1->V2 有效且 V2->V3 有效,那么直接从 V1->V3 迁移应该没有问题 - 除非您搞砸了。 :)
启动 V1 版本,然后切换到 V3 并逐步调试问题。
NSDictionary *options = @
NSMigratePersistentStoresAutomaticallyOption: @YES,
NSInferMappingModelAutomaticallyOption: @YES
;
NSError *error;
NSPersistentStore *persistentStore = [persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error];
if (!persistentStore)
NSLog(@"migration failed: %@", error);
【讨论】:
以上是关于iOS 核心数据轻量级迁移的主要内容,如果未能解决你的问题,请参考以下文章