使用NSURLConnection及其回调的好习惯?目标C

时间:2015-04-27 11:27:01

标签: ios objective-c xcode nsurlconnection

我真的没有当前的问题,而是一个我似乎无法找到令人满意的答案的问题。

在objective-c中处理NSURLConnection的回调和调用时,使用什么是好的做法?我们来看一些例子。

假设我有3个不同的ViewControllers,并且我创建了一个使用NSURLConnection进行网络调用的类,以便从某个站点获取JSON。所有3个VC都将进行不同类型的网络呼叫。如何在不重复代码或网络处理全部展开的情况下如何做到这一点?如果我需要根据前一个呼叫的结果进行更多的网络呼叫怎么办?

我使用普通的NSURLConnection委托,例如didReceiveResponsedidReceiveDataconnectionDidFinishLoading等。所以我要做的是将statusCode存储在didReceiveResponse和{{{} 1}}我调用一个名为connectionDidFinishLoading的函数来检查statusCode,如果statusCode表明调用成功,我翻译我已经存储了我从{收到的数据的handleResponse对象{1}}代表。这一切都很好,但是我翻译的数据我希望被发送到正确的viewController。

有几种方法可以做到这一点:

  1. 我让NSURLConnection调用的委托成为 ViewController本身。这很糟糕,因为我必须复制 每个VC中的NSURLConnection代码我想进行网络呼叫, 明显。
  2. 或者我可以处理执行的Network类中的所有数据 NSURLConnection调用。这很糟糕,因为我得到了一个逻辑代码 网络课,我真的不想要那个?这也要求网络类知道它可能不应该的类和数据结构。它是一个网络类,不应该做什么,除了网络的东西。
  3. 我最后的方法,我现在第一次尝试,是让我的 ViewController告诉网络类它想要创建一个 NSURLConnection调用,并设置一个NSData*消息 网络类应该在didReceiveData方法I中调用 较早前提过。 Network类发送它收到的数据 通过NSNotification和处理该数据的逻辑 取决于要求的VC。对我来说这是最合乎逻辑的 并且感觉像是一种做事的好方法。
  4. 解决方案3的问题在于我必须使用不同的Notification方法来处理不同类型的数据,这可能导致相当多的此类方法。如果不同的VC也使用与另一种NSNotification方法相同类型的数据处理,那么我也必须复制该代码。我一般都非常习惯使用NSNotification,而且对其缺点知之甚少。

    最后一个问题,让我们说我要做4个不同的NSURLConnection调用,一个接一个地确认完成并成功。你会怎么做?我已经完成了几次这样的操作,但最终会以枚举的形式作为计数器来跟踪刚刚进行的网络调用以及下一个应该进行的网络调用,这会导致switch语句执行某些代码取决于刚刚执行的。我正在考虑实现某种类型的队列,而这种队列通过序列中的所有调用来代替。

    我感谢任何形式的投入!

1 个答案:

答案 0 :(得分:1)

AFNetworking解决了大多数(如果不是全部)这些问题。特别是有关必须复制请求或连接的问题。

对于最后一个问题,例如你可以用块AFNetworking提供这样的结构,所以你可以专门协调多个调用。

<强> AFNetworking

有很多教程,库github网站的简要文档提供了简短易懂的示例。使用它需要几分钟。