本质上,我需要在一个类中创建一个核心数据对象,并将其传递给另一个类,然后保存它。由于我们正在尝试使用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:代码之外创建对象。
答案 0 :(得分:0)
假设:您正在使用MagiaclRecord 2.3beta5。如果没有,请发布您的版本。
你实际上是在MagicalRecord的-saveWithBlock:
之外创建你的对象。你的第一行是这样做的。它在MR_defaultContext中创建一个对象,但该对象不会保留。它仅存在于MR_defaultContext中。如果你想坚持那个对象,那么你可以简单地做:
[referenceData.managedObjectContext MR_saveToPersistentStoreAndWait]; // or a variant of
您可以将referenceData
传递给另一个对象,viewController,无论如何,即使它没有保存。