Anu*_*ole 12 iphone core-data core-data-migration ios4
我在Core Data中有2个对象模型(比如v1和v2).此迁移适用于轻量级迁移.现在,我希望在迁移后执行自定义代码,但仅在迁移从v1到v2时执行.稍后如果我介绍v3,我不希望自定义代码被执行.
有没有办法做到这一点?
在此先感谢,Anupam
Mas*_*aro 10
以下是如何处理这种情况,基本上是通过使用商店的元数据,正如Apple工程师在WWDC 2010上所建议的那样:
或多或少,像

- (void)loadStoreWithMigration:(NSURL *)url {
...
store = [psc addPersistentStoreWithType: NSSQLiteStoreType configuration: nil URL: url options: opts error: &err];
m = [store metadata];
key = @”DonePostProcessing”;
if (m && ([[m objectForKey: key] integerValue] < 2) ){
[self doPostProcessingInContext: context];
m2 = [[m mutableCopy] autorelease];
[m2 setObject: [NSNumber numberWithInteger: 2] forKey: key];
[store setMetadata: m2];
ok = [context save:&err];
}
}
Run Code Online (Sandbox Code Playgroud)
可能有更好的方法,买这个应该有效:
通过在核心数据中保留名为“Information”的实体并具有名为“CoreDataVersion”的属性来跟踪数据库版本。
迁移代码完成后,添加代码以检查核心数据中的版本号。
如果“CoreDataVersion”的值为“v1”并且您的应用程序现在处于“v2”(这可以对每个版本进行硬编码),请执行其他自定义代码,然后将新版本写回数据库。
如果您已经向用户发布了“v1”,只需说如果数据库中没有“CoreDataVersion”,那么它就是“v1”。