等待在Xcode中完成任务

时间:2014-03-28 10:27:56

标签: objective-c nsdata nsurl

我如何等待某项任务完成?

这就是我要做的事情:

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,因为在数据甚至初始化之前调用它。我百分百肯定,建立了连接。

我想用它作为以编程方式检查互联网连接的简单方法。

1 个答案:

答案 0 :(得分:2)

dataWithContentsOfURL:是一个阻止调用,因此当您尝试使用它时会初始化data。如果它为零,那么您可能会遇到要加载的网址的问题。

因为这是阻塞,所以不应该在主线程上使用它。而且,通常,您不应该等待完成 - 您应该接受网络操作的异步性质,并使用适当的异步API和设计来处理它们。

记录您正在创建的NSURL以检查它是否存在(如果没有则修复)。


运行异步下载和处理结果的最简单选项是使用NSURLConnection +sendAsynchronousRequest:queue:completionHandler:。将队列提供为[NSOperationQueue mainQueue],以便您的回调在主线程上运行,并且您可以更新UI。