我如何等待某项任务完成?
这就是我要做的事情:
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:stringURL]];
if (!data) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:[NSString stringWithFormat:@"%@", NOCONNECTIONALERTTITLE] message:[NSString stringWithFormat:@"%@", NOCONNECTIONALERTMESSAGE] delegate:self cancelButtonTitle:[NSString stringWithFormat:@"%@", NOCONNECTIONALERTCANCELBUTTON] otherButtonTitles:nil, nil];
[alert show];
} else { ... }
此if
始终为false,因为在数据甚至初始化之前调用它。我百分百肯定,建立了连接。
我想用它作为以编程方式检查互联网连接的简单方法。
答案 0 :(得分:2)
dataWithContentsOfURL:
是一个阻止调用,因此当您尝试使用它时会初始化data
。如果它为零,那么您可能会遇到要加载的网址的问题。
因为这是阻塞,所以不应该在主线程上使用它。而且,通常,您不应该等待完成 - 您应该接受网络操作的异步性质,并使用适当的异步API和设计来处理它们。
记录您正在创建的NSURL
以检查它是否存在(如果没有则修复)。
运行异步下载和处理结果的最简单选项是使用NSURLConnection +sendAsynchronousRequest:queue:completionHandler:
。将队列提供为[NSOperationQueue mainQueue]
,以便您的回调在主线程上运行,并且您可以更新UI。