从 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 检索核心数据模型版本的主要内容,如果未能解决你的问题,请参考以下文章