从 appDelegate 检索核心数据模型版本

Posted

技术标签:

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

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

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

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

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

谢谢, 最大

【问题讨论】:

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

【讨论】:

谢谢,我会用同样的方法。最大

以上是关于从 appDelegate 检索核心数据模型版本的主要内容,如果未能解决你的问题,请参考以下文章

核心数据轻量级迁移 - 何时版本?

Swift:在核心数据模型中搜索字符串

从核心数据模型 Swift 3 中删除一行

无法使用核心数据检索数据

轻量级迁移后如何从 Core Data 中删除数据

核心数据 - 从一对多关系中检索属性