ios – UI在执行NSBatchDeleteRequest时冻结

ios – UI在执行NSBatchDeleteRequest时冻结,第1张

概述NSFetchRequest *request = [Report fetchRequest];request.predicate = [NSPredicate predicateWithFormat: @"reportId IN %@",self.selectedRowsInEditMode];NSBatchDeleteRequest *deleteDetailsRequest = [[N
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时冻结所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1033216.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存