UI在执行NSBatchDeleteRequest时冻结

时间:2017-11-27 17:37:22

标签: ios objective-c core-data

NSFetchRequest *request = [Report fetchRequest];
request.predicate = [NSPredicate predicateWithFormat: @"reportId IN %@",self.selectedRowsInEditMode];

NSBatchDeleteRequest *deleteDetailsRequest = [[NSBatchDeleteRequest alloc] initWithFetchRequest:request];
deleteDetailsRequest.resultType = NSBatchDeleteResultTypeStatusOnly;
[self.managedObjectContext executeRequest:deleteDetailsRequest error:&errorExecuteRequest];

if (!errorExecuteRequest) {
    NSError *deleteSaveError;
    BOOL saveSuccessful = [self.managedObjectContext save:&deleteSaveError];
    [self.tableView removeLoadingActivityView];

这是我尝试一次删除多个报表管理对象的代码,但是当调用executeRequest时,UI会冻结很长一段时间然后删除。但就删除而言,NSBatchDeleteRequest应该非常快。我尝试了多次修改以使其正常工作但没有成功。 我不确定我在这里做错了什么。所以任何人都可以建议让它在没有UI故障的情况下工作。

1 个答案:

答案 0 :(得分:0)

您可以创建异步提取请求,同步可以冻结UI。此链接Asynchronous Fetch Request是目标C中的一个教程,用于解释如何操作。