【发布时间】:2017-11-27 17:37:22
【问题描述】:
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 故障的情况下工作。
【问题讨论】:
-
能否启用 SQLDebug 并发布控制台输出。它应该显示有关正在处理以完成批量删除的 SQL 请求的一些详细信息。
-
您是否知道您的数据库有多大以及您要删除的对象大致有多少?您的批量删除请求也在主线程上执行吗? (我想是的,如果它冻结了 UI)
-
@frankodwyer 我之前在主队列上有代码,然后我把它移到了一个单独的后台队列。这样就解决了,但我担心 NSBatchDeleteRequest 需要一些时间来删除甚至删除单个实体的请求。该实体有一个具有无效规则的关系对象。即使我有一个单一的关系 obj 那么也需要时间。
-
@pbasdf 无法发布数据库的控制台日志,因为我无法共享数据信息。
-
@pbasdf 我只能说我在这里使用的实体对象有几个关系。但即使我在其中一个关系中只有一个关系对象,也需要时间。但我想大致了解 NSBathcDeleteRequest 的行为如何?
标签: ios objective-c core-data