NSURLConnection异步无法正常工作

 hhxsv5 发布于 2023-02-06 19:49

我正在尝试创建一个异步NSURL请求,但我得到了所有"FALSE".

-(BOOL)checkConnectionForHost:(NSString*)host{

   BOOL __block isOnline = NO;
   NSURLRequest *request = [[NSURLRequest alloc]initWithURL:[NSURL URLWithString:host] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:1];
   [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
      if([(NSHTTPURLResponse*)response statusCode]==200){
         isOnline = TRUE;
      }
   }];
   NSLog(@"%i",isOnline);
   return isOnline;
}

此外,当我实际上只使用它时,此代码被称为"6"次:

-(UICollectionViewCell*)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath

并且我的数据源中只有3个单元格或3个项目.第一次在Objective-C中处理异步和回调,所以非常感谢详细的答案!谢谢!

1 个回答
  • 异步调用将并行执行,其结果将在完成块中接收.在您的情况下,将在完成异步请求之前执行return语句.这将永远是错误的.

    您应该为此使用同步请求,并处理不阻止UI.

    -(BOOL)checkConnectionForHost:(NSString*)host{
    
        BOOL isOnline = NO;
        NSURLRequest *request = [[NSURLRequest alloc]initWithURL:[NSURL URLWithString:host] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:1];
        NSHTTPURLResponse *response;
        NSError *error;
    
        NSData *responseData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    
        NSLog(@"Response status Code : %d",response.statusCode);
        isOnline = response.statusCode == 200;
    
        return isOnline;    
    }
    

    您可以在调度队列中使用该方法,

    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
    dispatch_async(queue, ^{
        BOOL status = [self checkConnectionForHost:@"http://google.com"];
        NSLog(@"Host status : %@",status ? @"Online" : @"Offline");
    });
    

    2023-02-06 19:51 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有