使用NSURLSession时,UI被阻止

Thanh-Nhon Nguyen

我正在使用Web服务进行身份验证的项目需要登录表单。我没有问题连接到服务器,但似乎NSURLSession阻止了我的用户界面,并且经过大量调试后,我真的不知道为什么。

为简单起见,以下是我的代码:

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"example.com/service"]];

//1
    //_sessionLogin = [NSURLSession sessionWithConfiguration:sessionConfigurationLogin delegate:self delegateQueue:nil];
//2 //Whether I use 1 or 2, it acts the same way

    _sessionLogin = [NSURLSession sharedSession];

    NSURLSessionDataTask *sessionDataTaskLogin = [_sessionLogin dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error)
    {
        if(!error)
        {
            NSLog(@"loginWithSuccess");
            UIAlertView *alertError = [[UIAlertView alloc] initWithTitle:@"Login ok" message:@"ok" delegate:self cancelButtonTitle:@"Close" otherButtonTitles: nil];
            [alertError show];

    }
}];

//Begin login request
[sessionDataTaskLogin resume];

_sessionLogin是一个NSURLSession

由于与服务器的连接速度很快,因此在我按下登录按钮后,NSLog(@“ loginWithSuccess”)几乎立即出现,但是显示UIAlertView大约要花10秒钟的时间(很长一段时间)。而且我也无法与UI进行交互。

在此先感谢您提供的所有解决方案。

您的完成块未在主线程上运行。由于UI更新必须在主线程上进行,因此您应该将警报视图分派到主队列,然后立即看到它。

NSURLSessionDataTask *sessionDataTaskLogin = [_sessionLogin dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    if (!error) {
        NSLog(@"loginWithSuccess");
        dispatch_async(dispatch_get_main_queue(), ^{
            UIAlertView *alertError = [[UIAlertView alloc] initWithTitle:@"Login ok" message:@"ok" delegate:self cancelButtonTitle:@"Close" otherButtonTitles: nil];
            [alertError show];
        });
    }
}];

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用异步/等待时防止Winforms UI阻止

来自分类Dev

阻止UI线程时使用WebBrowser控件加载html

来自分类Dev

阻止UI线程时使用WebBrowser控件加载html

来自分类Dev

使用类别时未保留NSURLSession

来自分类Dev

在ASP.NET Web应用程序中对Task使用async / await时,UI线程被阻止

来自分类Dev

gradle构建使用100%CPU并阻止UI

来自分类Dev

使用WPF / Caliburn的非UI阻止任务

来自分类Dev

如何在主线程上使用大型全局对象时不从工作线程中阻止主UI线程

来自分类Dev

在IOS中使用Web服务时,发生NSURLSession内存泄漏

来自分类Dev

如何在应用启动时处理UI阻止代码

来自分类Dev

连接到蓝牙扫描仪时 UI 被阻止

来自分类Dev

使用ObservableCollection时如何阻止DataGrid闪烁?

来自分类Dev

使用cdvfile时AJAX被阻止-Phonegap

来自分类Dev

在端口5938被阻止时使用Team Viewer?

来自分类Dev

NSUrlSession是否阻止应用程序挂起?

来自分类Dev

使用async / await仍会阻止Xamarin.Android上的UI

来自分类Dev

使用async / await仍会阻止Xamarin.Android上的UI

来自分类Dev

使用NSURLSession设置cookie

来自分类Dev

使用NSURLSessionDelegate的Swift NSURLSession

来自分类Dev

Backgroundworker阻止UI

来自分类Dev

MVVM中被阻止的UI

来自分类Dev

解除阻止AngularJS UI

来自分类Dev

EKEventStore阻止ui线程

来自分类Dev

阻止UI交互的元素

来自分类Dev

onCreateLoader阻止了UI线程

来自分类Dev

任务阻止的 UI

来自分类Dev

使用OperationQueue时更新UI

来自分类Dev

使用睡眠时如何阻止Excel变为非响应式

来自分类Dev

使用StaggeredGridLayoutManager时阻止项目四处移动