如何链接异步NSURLConnections?

时间:2012-04-22 14:06:29

标签: iphone nsurlconnection

将异步NSURLConnections链接起来的最合适方法是什么?例如,我需要向用户注册Web服务。工作流程如下: 获取注册令牌=>使用令牌注册=>获取登录令牌=>使用令牌登录。

我知道如何创建异步NSURLConnection,但我不确定如何在继续之前确保先前的连接已完成。我知道我可以使用NSURLConnection sendSynchronousRequest实现此目的,但我不喜欢在这些链接请求发生时我的主线程被阻止。

3 个答案:

答案 0 :(得分:2)

当我们为iPhone构建我们的第一个版本的SignMeOut时,我们确实做到了这一点。我们创建了一个NSUrlconnection的子类,并在connectionDidFinish中为它提供了一个识别标签,你可以使用带枚举的简单开关/案例。效果很好 - 您可以在我们的博客中看到整个流程,示例和代码

http://www.isignmeout.com/multiple-nsurlconnections-viewcontroller/

<强>更新

我已经将NSURLConnection子类修改为更简单的类别。大部分用法都相同,但使用相同的类

更清洁

https://github.com/Shein/Categories

答案 1 :(得分:1)

您可以查看connectionDidFinishLoading以启动另一个异步连接。对于哪个连接结束的条件,您可以保留对连接的引用,以防其他连接也需要完成(在您的情况下可能不需要)。让您的课程遵循NSURLConnectionDelegate并在connectionDidFinishLoading委托方法中触发相应的连接。您还可以使用connectionDidReceiveData:方法检查从服务收到的凭据等。也可以浏览documentation

答案 2 :(得分:1)

您有不同的选择:

  • 使用可变数组或字典创建队列
  • 如果您将它组合使用,请创建一种简单的NSOperationQueue 使用新的仅用于NSUrlConnection的ios5 API
  • 第三方lib,例如AFNetworking
  • 阻止GCD对它们进行分组(很难出现NSRunLoop的原因,请注意连接正在运行的线程)