Ios 核心数据一对多关系未通过神奇记录持久化存储

Ios 核心数据一对多关系未通过神奇记录持久化存储,ios,sqlite,core-data,magicalrecord,Ios,Sqlite,Core Data,Magicalrecord,我试图将从两个web API接收的数据存储在核心数据中。数据正确输入,我正确解析了JSON。我的两个实体导致以下问题: @interface Instance : NSManagedObject ... snipped properties ... @property (nonatomic, retain) NSSet* details; @end @interface Instance (CoreDataGeneratedAccessors) -(void)addDetailsObject:

我试图将从两个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下载实例。然后解析detailId的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,大多数将正常运行

它总是同一个实例->没有持久化的详细链接,但我看不到丢失的链接之间有任何明显的链接。核心数据或MagicalRecord中没有错误。保存所有返回成功

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


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

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

谢谢,这是真的。这是我的抄写错误。不匹配的上下文实际上会引发错误。我已经用本地上下文更新了代码。