iphone RESTful Web服务

时间:2009-09-20 22:13:18

标签: iphone web-services rest

甚至不确定标题是否正确,但是,我想要做的是使用标准的NSURLConnection类来处理来自调用我的webservice的响应。我使用POST方法更新数据库,使用GET方法从数据库中检索行。我遇到的问题是这两个动作可能同时发生,因此处理请求的方法可能会相互衔接。换句话说,在我的“连接didReceiveData”方法中,我有2条路径通过代码,具体取决于我是否正在处理来自GET或POST请求的响应。

我跟踪一个名为requestType的实例变量正在处理的请求。问题是,由于请求正在同时执行,因此实例变量在GET完成之前从GET更改为POST(反之亦然)。我的问题是如何在这种情况下维护2个单独的请求?我是否同步请求?线程有没有办法在这里工作?我是否为每个请求创建了2个单独的对象,并且“didRecieveData”查询中的逻辑是否正在处理哪个对象?任何帮助将不胜感激!!

3 个答案:

答案 0 :(得分:1)

似乎你通过让一个试图做太多事情的课程来创造一个混乱的问题。我建议采取以下三种方法之一:

1)写两个类,一个用于更新,一个用于检索。每个类都创建自己的私有NSURLConnection对象,并充当从NSURLConnection接收的异步通知的委托。这些类可以共享一些实用程序解析代码或扩展其中包含该解析代码的基础对象。但关键是调用这些类的代码将实例化其中一个,进行调用,然后释放它。这将使您的代码更清晰,并确保事件通知不会混杂。

2)创建一个单独的类,根据初始化,使用它自己的NSURLConnection私有实例进行post或get。当需要进行调用时,实例化类,获取结果,然后释放类。

3)编写连接处理类,使它们使用同步NSURLConnection方法并在后台线程中调用该类。

无论哪种方式,清晰的代码和清晰的对象方向都可以防止像您所描述的那样混乱的场景。

答案 1 :(得分:1)

在我们的某个应用中处理类似问题。解决方案涉及创建一个表示webservice调用的类,负责调用自己的url,加载自己的数据等。调用类有一个委托来处理解析响应(在我们的例子中,是一个Web服务控制器)。伤害变得相当复杂,但阻止了NSURLConnections相互踩踏的问题。

答案 2 :(得分:0)

创建处理调用的单独对象。如果你想一次发出多个请求,我强烈建议你查看NSOperationQueue,并使这些对象成为NSOperation的子类......这是处理多个后台请求的更好方法。

这是一个很好的例子:

http://www.cimgf.com/2008/02/16/cocoa-tutorial-nsoperation-and-nsoperationqueue/

有一种想法是,在不同线程上运行的操作中使用非异步Web调用。您仍然可以在NSOperation中使用异步调用,但这样做有点棘手,对于您可能不需要的简单调用。