在使用上下文限制时,使关系有序会导致“悬空引用无效对象。”错误

时间:2013-08-29 18:45:07

标签: ios core-data ios5

尝试AFIncrementalStore后,我决定手动完成大部分工作,以便更好地控制发生的事情和时间。

对象结构我看起来像这样。 "产品"关系是有序的。

enter image description here

这里是在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);
    }];
}];

似乎对我来说是正确的,但在保存父上下文时总是会出现错误,该上下文显示"悬挂对无效对象的引用。“

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

你不应该设置关系的两面。核心数据为您设置了相反的一半,因此您可以移除products集,只需依靠设置product.dashboardViewModel = dashboardViewModel