当您使用自iOS 8起可用的NSBatchUpdateRequest
类执行批量更新时,任何现有的托管对象上下文都不知道对持久性存储所做的更改。我的问题是如何更新托管对象上下文以反映持久性存储中的更改。
[我正在使用提取的结果控制器,并且我尝试通过在托管对象上下文上调用refreshObject:mergeChanges:
并重新加载表视图来将每个托管对象变成故障,但这似乎不起作用。] >
当您使用自iOS 8起可用的NSBatchUpdateRequest类执行批处理更新时,任何现有的托管对象上下文都不知道对持久性存储所做的更改。我的问题...
NSBatchUpdateRequest可以设置为结果类型为NSStatusOnlyResultType
,NSUpdatedObjectIDsResultType
或NSUpdatedObjectsCountResultType
。 NSUpdatedObjectIDsResultType
是唯一返回有关批处理操作影响哪些对象的有意义信息的信息。
- (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;
}