gpt4 book ai didi

ios - NSURLConnection 异步不工作

转载 作者:行者123 更新时间:2023-11-28 18:05:56 26 4
gpt4 key购买 nike

我正在尝试发出一个异步 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 中处理异步和回调,所以非常感谢详细的答案!谢谢!

最佳答案

异步调用将并行执行,其结果将在完成 block 中接收。在您的情况下,返回语句将在异步请求完成之前执行。那将永远是假的。

你应该为此使用同步请求,并且处理不要阻塞 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");
});

关于ios - NSURLConnection 异步不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20896308/

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