使关系有序会导致“对无效对象的悬空引用”。使用上下文限制时出错
Posted
技术标签:
【中文标题】使关系有序会导致“对无效对象的悬空引用”。使用上下文限制时出错【英文标题】:Making a relationship ordered causes "Dangling reference to an invalid object.” error while using context confinement 【发布时间】:2013-08-29 18:45:07 【问题描述】:在试用 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);
];
];
对我来说似乎是正确的,但我在保存父上下文时总是收到一个错误,上面写着“悬挂对无效对象的引用”。
有什么建议吗?
【问题讨论】:
可能与您的错误无关,但您不必设置关系的双方。核心数据为您设置了关系的反半部分,因此您可以删除您的products
集并仅依赖设置 product.dashboardViewModel = dashboardViewModel
。
@dokkaebi 请将此作为答案发布,我会接受!
【参考方案1】:
您不必设置关系的双方。核心数据为您设置了关系的反半部分,因此您可以删除您的 products
集并仅依赖设置 product.dashboardViewModel = dashboardViewModel
。
【讨论】:
以上是关于使关系有序会导致“对无效对象的悬空引用”。使用上下文限制时出错的主要内容,如果未能解决你的问题,请参考以下文章
Core Data 使用多个上下文中的新对象从后台线程订购一对多关系保存