2014-09-11 60 views
0

之外这是My previous questionHOWTO创造核心数据实体MagicalRecord的saveWithBlock

一个遵循实质是,我需要一个类来创建一个核心数据对象,并将其传递给另一个类,然后将其保存。这种情况很复杂,因为我们试图使用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

您是否找到解决方案?我有相同的问题... – blackjacx 2014-10-17 09:13:32

+0

我们发现了一个我们不喜欢的“黑客”,但是很有效。我们基本上重新编码以避免使用多个上下文的MR。在其他地方,我们手动管理MR之外的对象。简而言之,MR并不是它自称的魔力子弹。 – drekka 2014-10-19 06:51:18

回答

0

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

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

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

你可以通过referenceData到另一个对象,的viewController,不管,即使没有救了它。