2013-05-09 126 views
2

任何人都知道如何在应用程序启动时获取核心数据模型版本?从appDelegate检索核心数据模型版本

我已经实现了轻量级迁移并且工作正常,但是我需要检查sqlite数据库是否基于迁移过程开始之前的旧模型版本。

在新模型中,我添加了一个新实体,但我需要使用旧模型的实体的值来填充它。我只想这样做一次。

有没有办法在appdelegate中做到这一点?

感谢, 最大

+0

AFAIK核心数据只会尝试执行轻量级迁移,如果它发现它需要。如果它已经完成了,它将不会再尝试。您应该能够将您的实体特定的代码置于迁移方法中。 – ChrisH 2013-05-09 14:17:32

+0

是的,但我想核心数据比较启动时的模型版本,以便知道是否执行迁移。我虽然有这个信息的地方。 – masgar 2013-05-09 16:25:24

回答

0

我在我的喜好(的.plist)设置DB-版本解决了这个。所以如果我更改了数据库,我在那里设置了新的数据库版本,并将NSUserDefaults中最后一个开始的版本存储起来。

NSNumber *newDbVersion = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"DBVersion"]; 
NSNumber *oldDbVersion = [[NSUserDefaults standardUserDefaults] objectForKey:@"DBVersion"]; 

if (oldDbVersion == nil) 
{ 
    // part without handling, so you know the max db version. 
}else 
{ 
    if([oldDbVersion intValue] < [newDbVersion intValue]) 
    { 
     // try the liteweight migration and if that failed, migrate by hand 
    } 
} 
+0

谢谢,我会用同样的方法。马克斯 – masgar 2013-05-10 07:42:07