我正在尝试存储从核心数据中的几个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中没有错误。保存所有返回成功。
有没有人遇到类似的问题?你做了什么?有什么我可以尝试的东西?
这是一个多对多链接,但我没有将详细信息建模回实例,因为我不需要遍历。我应该吗?
答案 0 :(得分:0)
您需要在findFirst调用中指定localContext。您正在执行的更改位于具有新的本地上下文的后台队列中。然后saveWithBlock方法只保存localContext,而不是defaultContext。 defaultContext是您未指定一个时使用的那个,就像您在示例代码中所做的那样。