2012-04-22 36 views
0

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

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

回答

2

当我们为iPhone构建我们的第一版SignMeOut时,我们做了EXACTLYA。我们创建了一个NSUrlconnection的子类,并在connectionDidFinish中为它提供了一个标识标记,您可以使用一个简单的开关/一个枚举枚举。伟大的工程 - 你可以看到在我们的博客

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

UPDATE

我已经修改了NSURLConnection的子类到一个更简单的范畴整个流程和示例和代码。大多数使用的是相同的,但使用相同的类

https://github.com/Shein/Categories

+0

棒极了!非常感谢您花时间发布此信息。 – squarefrog 2012-04-22 14:28:08

+0

很高兴它对别人有用:)让我知道它是如何为你工作的 – shein 2012-04-22 14:48:31

+0

就像更新,尝试这个更早,效果很好!完美解决方案 – squarefrog 2012-04-22 22:47:16

1

您可以查看connectionDidFinishLoading以启动另一个异步连接。对于哪些连接结束的条件,如果其他连接也预计完成(可能不需要您的情况),您可以保留对连接的引用。让你的班级遵循NSURLConnectionDelegate并在connectionDidFinishLoading委托方法中触发适当的连接。您也可以使用connectionDidReceiveData:方法检查从服务收到的凭证等。也请通过documentation

+0

十分感谢吸尘器!你会如何建议分拆这些方法?例如,我有两个主要场景。 1)用户正在注册,这将需要上述四个条件,2)用户正在登录,我们将只需要最后两个连接。 'BOOL isRegistering' iVar或其他适当的东西? – squarefrog 2012-04-22 14:21:27

+0

当然,如果适合你,使用bools也可以... – tipycalFlow 2012-04-22 14:25:39

1

你有不同的选择:

  • 创建使用可变数组或字典
  • 如果您在组合 新只使用它的ios5 API为NSURLConnection的
  • 创建一个NSOperationQueue那种轻松队列
  • 第三方库如AFNetworking
  • 块GCD分组他们(很难为NSRunLoop的原因,注意在哪个线程连接运行)
+0

好极了。很高兴知道所有的选择! – squarefrog 2012-04-22 14:36:45