批量更新后在托管对象上下文中更新托管对象

问题描述 投票:1回答:2

当您使用自iOS 8起可用的NSBatchUpdateRequest类执行批量更新时,任何现有的托管对象上下文都不知道对持久性存储所做的更改。我的问题是如何更新托管对象上下文以反映持久性存储中的更改。

[我正在使用提取的结果控制器,并且我尝试通过在托管对象上下文上调用refreshObject:mergeChanges:并重新加载表视图来将每个托管对象变成故障,但这似乎不起作用。] >

当您使用自iOS 8起可用的NSBatchUpdateRequest类执行批处理更新时,任何现有的托管对象上下文都不知道对持久性存储所做的更改。我的问题...

ios objective-c core-data ios8
2个回答
2
投票

NSBatchUpdateRequest可以设置为结果类型为NSStatusOnlyResultTypeNSUpdatedObjectIDsResultTypeNSUpdatedObjectsCountResultTypeNSUpdatedObjectIDsResultType是唯一返回有关批处理操作影响哪些对象的有意义信息的信息。


0
投票
- (NSBatchUpdateResult*)executeBatchUpdateRequest:(NSBatchUpdateRequest*)request
                                          context:(NSManagedObjectContext*)context
                                            error:(NSError**)error{
    NSBatchUpdateResult *bur = (NSBatchUpdateResult *)[context executeRequest:request error:error];
    if (bur && bur.resultType == NSUpdatedObjectIDsResultType){
        NSArray <NSManagedObjectID*> *arr = bur.result;
        if ([arr isKindOfClass:NSArray.class] && arr.count > 0){
            // can update multiple contexts
            [NSManagedObjectContext mergeChangesFromRemoteContextSave:@{NSUpdatedObjectsKey:arr}
                                                         intoContexts:@[context]];
    }
    return bur;
}
© www.soinside.com 2019 - 2024. All rights reserved.