尝试AFIncrementalStore后,我决定手动完成大部分工作,以便更好地控制发生的事情和时间。
对象结构我看起来像这样。 "产品"关系是有序的。
这里是在NSOperation中运行的代码
NSManagedObjectContext* childContext = [[NSManagedObjectContext alloc] initWithConcurrencyType: NSPrivateQueueConcurrencyType];
childContext.parentContext = self.parentManagedObjectContext;
[childContext performBlockAndWait: ^
{
DashboardViewModel* dashboardViewModel = [NSEntityDescription insertNewObjectForEntityForName: @"DashboardViewModel"
inManagedObjectContext: childContext];
NSMutableOrderedSet* products = [NSMutableOrderedSet orderedSetWithCapacity: productRepresentations.count];
for (NSDictionary* rawProductRepresentation in productRepresentations)
{
Product* product = [NSEntityDescription insertNewObjectForEntityForName: @"Product"
inManagedObjectContext: childContext];
product.dashboardViewModel = dashboardViewModel;
[products addObject: product];
}
dashboardViewModel.products = products;
NSError* saveError = nil;
if (![childContext save: &saveError])
NSLog(@"Error: %@", saveError);
//Save parent context to push changes to persistent store
[self.parentManagedObjectContext performBlock: ^
{
NSError* saveParentError = nil;
if (![childContext.parentContext save: &saveParentError])
NSLog(@"Error: %@", saveParentError);
}];
}];
似乎对我来说是正确的,但在保存父上下文时总是会出现错误,该上下文显示"悬挂对无效对象的引用。“
有什么建议吗?
答案 0 :(得分:0)
你不应该设置关系的两面。核心数据为您设置了相反的一半,因此您可以移除products
集,只需依靠设置product.dashboardViewModel = dashboardViewModel
。