如何在MagicalRecord的saveWithBlock之外创建核心数据实体

时间:2014-09-11 08:06:45

标签: ios core-data magicalrecord

这是My previous question

的后续内容

本质上,我需要在一个类中创建一个核心数据对象,并将其传递给另一个类,然后保存它。由于我们正在尝试使用MagicalRecord来坚持创建不同的上下文,因此情况变得复杂。这是一个显示问题的代码块(这是在单元测试中):

__block HLMReferenceData *referenceData = [HLMReferenceData MR_createEntity];
__block NSManagedObjectID *objId = nil;
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext){
    HLMReferenceData *localReferenceData = [referenceData MR_inContext:localContext];
    [localContext obtainPermanentIDsForObjects:@[localReferenceData] error:NULL];
    objId = localReferenceData.objectID;
}
                  completion:^(BOOL success, NSError *saveError){
                      referenceData = (HLMReferenceData *)[[NSManagedObjectContext defaultContext] existingObjectWithID:objId error:NULL];
                  }];

基本上我们正在创建对象,将其传递给MR保存调用,然后重新检索对象,以便我们继续使用它。

执行... MR_inContext:localContext];方法时,会抛出核心数据133000错误。它似乎源于这样一个事实,即主要环境没有保存记录,它仍然具有临时ID。

真的需要一些帮助,因为我们需要能够在MR的saveWithBlock:代码之外创建对象。

1 个答案:

答案 0 :(得分:0)

假设:您正在使用MagiaclRecord 2.3beta5。如果没有,请发布您的版本。

你实际上是在MagicalRecord的-saveWithBlock:之外创建你的对象。你的第一行是这样做的。它在MR_defaultContext中创建一个对象,但该对象不会保留。它仅存在于MR_defaultContext中。如果你想坚持那个对象,那么你可以简单地做:

 [referenceData.managedObjectContext MR_saveToPersistentStoreAndWait]; // or a variant of

您可以将referenceData传递给另一个对象,viewController,无论如何,即使它没有保存。