MagicalRecord 3.0 设置

Posted

技术标签:

【中文标题】MagicalRecord 3.0 设置【英文标题】:MagicalRecord 3.0 Setup 【发布时间】:2014-03-11 19:25:07 【问题描述】:

我的 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 能解决这个问题。

【问题讨论】:

所以,抓取没有显着变化。如果提供了拉取请求,我们可以添加后台获取... 它会继续阻止保存吗? 大部分 api 也没有显着改变。保存是否会阻塞取决于您使用的堆栈。 我将主队列上下文的并发类型改为NSPrivateQueueConcurrencyType。现在效果很好。 【参考方案1】:

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

    识别模型所在的捆绑包 加载捆绑包 从包中加载模型 在访问上下文之前在堆栈上设置模型(上下文是延迟加载的,因此会触发模型和所有其他组件的加载)

如果您记录堆栈对象,会显示什么?您应该查看它是否从日志输出中加载了模型、商店等。

【讨论】:

我不记得在哪里遇到问题了。可能是第 4 号。我最终以 MagicalRecord 为例创建了一个非常简化的核心数据框。这是一个很棒的框架,但对我的需求(日志记录和键/值存储)来说太重了。

以上是关于MagicalRecord 3.0 设置的主要内容,如果未能解决你的问题,请参考以下文章

尝试将 Magical Record 与 Kiwi 一起使用时构建测试时出错

MagicalRecord 3.0 不保存。第二次构建没有对象

Magical Record、多种配置和 Restkit

AFNetworking 的 Magical Record 导入问题

使用 Magical Record 在 NSDictionary 中导入数组

Magical Record 似乎可以保存,但如果应用程序终止,更改会丢失