这个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]; });