【问题标题】:How can I chain asynchronous NSURLConnections?如何链接异步 NSURLConnections?
【发布时间】:2012-04-22 14:06:29
【问题描述】:

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

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

【问题讨论】:

    标签: iphone nsurlconnection


    【解决方案1】:

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

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

    更新

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

    https://github.com/Shein/Categories

    【讨论】:

    • 太棒了!非常感谢您花时间发布此内容。
    • 很高兴它对其他人有用:) 让我知道它对你的效果
    • 作为一个更新,之前尝试过,效果很好!完美的解决方案。
    【解决方案2】:

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

    【讨论】:

    • 非常感谢!你会如何建议拆分这些方法?例如,我有两个主要场景。 1)用户正在注册,这需要上面提到的四个条件,2)用户正在登录,我们只需要最后两个连接。 BOOL isRegistering iVar 或其他什么合适?
    【解决方案3】:

    你有不同的选择:

    • 使用可变数组或字典创建队列
    • 如果你结合使用它,创建一个 NSOperationQueue 很容易 使用适用于 NSUrlConnection 的新的唯一 ios5 API
    • AFNetworking 等第三方库
    • 阻止 GCD 对它们进行分组(由于 NSRunLoop 原因很难,请注意连接在哪个线程中运行)

    【讨论】:

    • 好的,很好。很高兴知道所有选项!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 2013-02-26
    • 1970-01-01
    • 2017-02-26
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多