2014-03-28 57 views
0

我如何可以等待特定的任务来完成?等待一个任务就在Xcode

这就是我想要做的事:

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始终是假的,因为其所谓的数据,即使被初始化之前。我100%确定,连接已建立。

我想用这个作为一个很不错的选择以编程方式检查网络连接。

回答

2

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

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

登录您要创建以检查它的存在(如果它不固定)NSURL


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

+0

你是对的!我的错!你能告诉我更多关于ios中的异步任务吗? – Philip

+0

在答案中增加了一个简单的选项。有很多选项取决于请求和响应的细节以及你将要对结果做什么... – Wain

+0

它基本上是一个从某个URL抓取JSONArray的任务。 – Philip