【问题标题】:Wait for a task do be done in Xcode等待任务在 Xcode 中完成
【发布时间】:2014-05-07 18:12:47
【问题描述】:

如何等待某项任务完成?

这就是我想要做的:

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% 确定连接已建立。

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

【问题讨论】:

    标签: objective-c nsdata nsurl


    【解决方案1】:

    dataWithContentsOfURL: 是一个阻塞调用,所以data 在你尝试使用它时会被初始化。如果它为 nil,那么您尝试加载的 URL 可能有问题。

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

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


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

    【讨论】:

    • 你说得对!我的错!你能告诉我更多关于 ios 中的异步任务的信息吗?
    • 为答案添加了一个简单的选项。有很多选项取决于请求和响应的详细信息以及您将如何处理结果...
    • 它基本上是一个从某个 URL 获取 JSONArray 的任务。
    • 如果您将它用于checking the internet-connection,那么您不想下载任何数据(或只下载一个字节)...
    • 不是真的,我正在使用它从我的数据库中下载一些东西。所以我需要它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-24
    • 2021-08-14
    • 2013-12-18
    相关资源
    最近更新 更多