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

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 使用多个上下文中的新对象从后台线程订购一对多关系保存

iCloud 中基于 SQLite 的核心数据中的有序关系

为啥使用 Activity 上下文会导致 Context 内存泄漏

无序/有序上下文获取

核心数据:有序关系中第一个元素的谓词

手写桶排序算法