gpt4 book ai didi

ios - NSURLConnection sendSynchronousRequest 似乎挂起

转载 作者:技术小花猫 更新时间:2023-10-29 11:03:34 28 4
gpt4 key购买 nike

此 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 多分钟。我当时杀了它,但我认为它会继续挂起。
  • 我目前没有使用委托(delegate),也不打算使用,请参阅下文。
  • 在应用程序的其他地方我使用sendAynchronousRequest 但在这个实例中我需要传递一个返回值(而且我不在主线程上),所以sendSynchronousRequest 是我所知道的唯一选择。
  • 以防万一,上下文是我正在实现 NSURLCache 协议(protocol),特别是 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 - NSURLConnection sendSynchronousRequest 似乎挂起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19681632/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com