MagicalRecord 3.0安装程序

时间:2014-03-11 19:25:08

标签: ios magicalrecord

我的xcdatamodel文件位于静态库中,因此我可以跨项目共享它。使用MagicalRecord 2.2我可以让这个应用程序识别我的对象模型。

NSBundle *dataBundle = [NSBundle bundleWithPath:path];
NSManagedObjectModel *objectModel = [NSManagedObjectModel mergedModelFromBundles:[NSArray arrayWithObject:dataBundle]];

[MagicalRecord setShouldAutoCreateManagedObjectModel:NO];
[NSManagedObjectModel MR_setDefaultManagedObjectModel:objectModel];
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"WhoAt.sqlite"];

MagicalRecord 3.0改变了这一点,我正在努力让它运行起来。使用默认设置方法,我在尝试保存时找不到实体。这是预期的,因为对象模型尚未合并。当我尝试使用下面的代码合并它时,存在一个断言失败,即存储(MagicalRecordStack对象上的属性)为空。

NSString *path = [NSString stringWithFormat:@"%@/WADataModel.bundle", [[NSBundle mainBundle] bundlePath]];
NSBundle *dataBundle = [NSBundle bundleWithPath:path];
NSManagedObjectModel *objectModel = [NSManagedObjectModel mergedModelFromBundles:[NSArray arrayWithObject:dataBundle]];

MagicalRecordStack *stack = [[AutoMigratingMagicalRecordStack alloc] initWithStoreNamed:@"WhoAt.sqlite"];
[stack setModel:objectModel];
[MagicalRecordStack setDefaultStack:stack];

我也尝试在使用其中一种设置方法后设置对象模型,但也失败了。任何帮助表示赞赏。

编辑:我停止使用2.2,因为它一直阻止主线程进行提取和保存。我希望3.0可以解决这个问题。

1 个答案:

答案 0 :(得分:0)

好的,您确定要在模型加载代码中加载数据模型吗? objectModel不是nil并且包含您期望的实体吗?你在这里展示的步骤似乎是正确的。那就是:

  1. 识别模型所在的捆绑包
  2. 加载捆绑包
  3. 从包中加载模型
  4. 在访问上下文之前在堆栈上设置模型(上下文是延迟加载的,因此触发模型和所有其他组件加载)
  5. 如果您记录堆栈对象,会显示什么?您应该看看它是否从日志输出中加载模型,存储等。