我应该在视图控制器中拥有所有的Web服务代码吗?

时间:2011-04-15 08:16:34

标签: iphone cocoa-touch

我注意到,使用iPhone编程时,由于检索数据的方式,您需要从ViewController中检索数据。

例如:调用ViewDidLoad。您开始检索数据,然后在完成后将消息发送到您的viewcontroller,例如requestFinished,这是您配置/刷新UI的地方。

我使用这种方法的问题是我在视图控制器中有一堆Web服务代码和XML构建和解析。

有谁知道这是正确的做法还是有更好的方法来做到这一点。

在.NET中我会专门用于从webservices中检索数据的类,我只是调用Web服务来获取数据,我可以在我的应用程序内的不同位置使用相同的Web服务。

3 个答案:

答案 0 :(得分:1)

在Objective-C / Cocoa中没有理由这样做。您应该创建一个处理Web服务的类,并在数据可用时通知视图控制器。

答案 1 :(得分:0)

那么你可以创建一个解析器,它将在一个单独的类中解析你的XML,甚至你的http请求也可以在一个单独的类中。 没有必要在视图控制器上做所有事情。

如果您正在使用线程,请确保创建委托或使用通知中心。如果视图控制器被卸载,请在请求上设置委托或解析为nil。

答案 2 :(得分:0)

不,这绝对不是正确的做法。关键是MVC范例 - 模型,视图,控制器 - 您的数据类非常适合作为M =模型,因此将所有数据处理代码放在专用模型类中。

由于url处理有望异步,因此在发生各种事件时,您的模型仍需要通知视图控制器。你有几个选择,但最合适的可能是使用委托模式,这样当模型有需要显示的数据时,模型基本上可以启动一个回调给视图控制器。

(另一种方法是使用不太紧密耦合的通知,并且在这种情况下完全可行,但代表会更合适。)