【问题标题】:Retrieve core-data model version from appDelegate从 appDelegate 检索核心数据模型版本
【发布时间】:2013-05-09 13:34:48
【问题描述】:

有人知道应用启动时如何获取核心数据模型版本吗?

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

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

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

谢谢, 最大

【问题讨论】:

  • AFAIK Core Data 只会在认为需要时尝试执行轻量级迁移。如果它已经完成它,它不会再试一次。您应该能够将特定于实体的代码放入迁移方法中。
  • 是的,但我想核心数据会在启动时比较模型版本,因此它知道是否执行迁移。我虽然在某个地方有这个信息。

标签: iphone ios core-data core-data-migration


【解决方案1】:

我通过在我的首选项 (.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
    }
}

【讨论】:

  • 谢谢,我会用同样的方法。最大
猜你喜欢
  • 2012-07-15
  • 2018-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多