ios – NSURLConnection sendSynchronousRequest似乎挂起

这个HTTP调用似乎挂起来,我看不出为什么.通话后的日志记录不会运行.

我几乎肯定会做一些非常愚蠢的事情,但如果有人能够发现它是什么,我将不胜感激.据我看到我的代码相当于文档.

我使用的URL似乎并不重要,HTTP请求从未被服务器记录(如果指向一个).

NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]];

NSURLResponse *res = nil;
NSError *err = nil;

NSLog(@"About to send req %@",req.URL);

NSData *data = [NSURLConnection sendSynchronousRequest:req returningResponse:&res error:&err];

NSLog(@"this never runs");

有任何想法吗?

更新

感谢所有发布到目前为止的人.仍然看到这个问题.一点点细节:

>代码正在设备上进行测试
>其他HTTP调用工作正常,如果它是一个网络问题,这是一个非常重要的
>代码已经超过了正常的超时时间.我知道它挂了20多分钟.那时我杀了它,但我认为它会继续挂.
>我目前没有使用委托,不打算,请看下面.
>在应用程序的其他地方我使用sendAynchronousRequest,但在这种情况下,我需要传递一个返回值(我不在主线程),所以sendSynchronousRequest是我知道的唯一选项.
>如果重要,上下文是我正在实现NSURLCache协议,特别是cachedResponseForRequest方法,这需要我返回一个NSCachedURLResponse

解决方法

在后台队列中运行请求,因此不会阻止UI更新发生的主线程:
dispatch_queue_t myQueue = dispatch_queue_create("myQueue",NULL);

    // execute a task on that queue asynchronously
    dispatch_async(myQueue,^{
NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com/"]];

NSURLResponse *res = nil;
NSError *err = nil;

NSLog(@"About to send req %@",req.URL);

NSData *data = [NSURLConnection sendSynchronousRequest:req returningResponse:&res error:&err];

    });

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...