核心数据一对多关系没有被持久存储通过魔法记录存储

时间:2014-10-27 21:35:25

标签: ios sqlite core-data magicalrecord

我正在尝试存储从核心数据中的几个Web API收到的数据。数据正确,我正确地解析了JSON。我的两个实体导致了以下问题:

@interface Instance : NSManagedObject
... snipped properties ...
@property (nonatomic, retain) NSSet* details;
@end

@interface Instance (CoreDataGeneratedAccessors)
-(void)addDetailsObject:(Detail*)value;
-(void)addDetails:(NSSet*)values;
-(void)removeDetailsObject:(Detail*)value;
-(void)removeDetails:(NSSet*)value;
@end

@interface Details : NSManagedObject
@property (nonatomic, retain) NSString* detailId;
... snipped properties ...
@end

我首先从API下载详细信息,然后从单独的API下载实例。然后我解析DetailIds的JSON数组并使用

BOOL success = [MagicalRecord saveWithBlockAndWait:^(NSManagedObjectContext* localContext) {
    for (NSString* parsedDetailId in parsedDetailsIds) 
    {
        Detail* detail = [Detail MR_findFirstByAttribute:@"detailId" withValue:parsedDetailId inContext:localContext];
        if (detail)
        {
            [instance.addDetailsObject:detail];
        }
    }
}];

存储新创建的链接。每个实例只有几个细节。下载这些详细信息后,一切都在本地上下文和默认上下文中按预期工作。但是,如果我关闭应用程序并从持久性存储加载,或者如果我使用调试器重置上下文,则某些详细信息链接将消失。一些具有2个细节的实例将具有1或0,大多数将表现正常。

它始终是相同的Instance->详细信息链接没有持久化,但我看不到任何缺失的链接。 Core Data或MagicalRecord中没有错误。保存所有返回成功。

有没有人遇到类似的问题?你做了什么?有什么我可以尝试的东西?

这是一个多对多链接,但我没有将详细信息建模回实例,因为我不需要遍历。我应该吗?

1 个答案:

答案 0 :(得分:0)

您需要在findFirst调用中指定localContext。您正在执行的更改位于具有新的本地上下文的后台队列中。然后saveWithBlock方法只保存localContext,而不是defaultContext。 defaultContext是您未指定一个时使用的那个,就像您在示例代码中所做的那样。