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故障的情况下工作.
我最后添加了以下内容,以便在批量删除后处理上下文.
[self.managedobjectContext refreshAllObjects];// Initialize Fetch RequestNSFetchRequest *fetchRequest = [Report fetchRequest];// Add Sort DescriptorsfetchRequest.predicate = [nspredicate predicateWithFormat: @"reportID IN %@",self.selectedRowsInEditMode];// Initialize Asynchronous Fetch RequestNSAsynchronousFetchRequest *asynchronousFetchRequest = [[NSAsynchronousFetchRequest alloc] initWithFetchRequest:fetchRequest completionBlock:^(NSAsynchronousFetchResult *result) { dispatch_async(dispatch_get_main_queue(),^{ // Process Asynchronous Fetch Result [weakSelf processAsynchronousFetchResult:result]; });}];// Execute Asynchronous Fetch Request[self.managedobjectContext performBlock:^{ // Execute Asynchronous Fetch Request NSError *asynchronousFetchRequestError = nil; NSAsynchronousFetchResult *asynchronousFetchResult = (NSAsynchronousFetchResult *)[weakSelf.managedobjectContext executeRequest:asynchronousFetchRequest error:&asynchronousFetchRequestError]; if (asynchronousFetchRequestError) { NSLog(@"Unable to execute asynchronous fetch result."); NSLog(@"%@,%@",asynchronousFetchRequestError,asynchronousFetchRequestError.localizedDescription); }}];
或者在下面使用全局队列来运行后台和主队列以更新UI
dispatch_async(dispatch_get_global_queue( disPATCH_QUEUE_PRIORITY_DEFAulT,0),^(voID){ //Background Thread dispatch_async(dispatch_get_main_queue(),^(voID){ //Run UI Updates });});总结
以上是内存溢出为你收集整理的ios – UI在执行NSBatchDeleteRequest时冻结全部内容,希望文章能够帮你解决ios – UI在执行NSBatchDeleteRequest时冻结所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)