2009-09-20 61 views
3

不知道如果标题是正确的,但是,我想要做的是使用标准的NSURLConnection类来处理调用我的web服务的响应。我使用POST方法更新数据库,并使用GET方法从数据库中检索行。我遇到的问题是这两个操作可能会同时发生,以便处理请求的方法可能会彼此相继。换句话说,在我的“连接didReceiveData”方法中,我有2个通过代码的路径,具体取决于我是处理来自GET还是POST请求的响应。iphone RESTful webservices

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

回答

1

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

1

好像你创建了一个混乱的问题,有一个类试图做太多事情。我建议采取以下三种方法之一:

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

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

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

无论哪种方式,干净的代码和清晰的对象方向将防止像你所描述的那种混乱的场景。

0

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

一个很好的例子是在这里:

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

的想法有您使用非asyncronous网络电话,在被单独的线程上运行操作。你仍然可以在NSOperation中使用异步调用,但这样做有点棘手,对于你可能不需要的简单调用。