iPhone RESTful Web服务

3
我不确定标题是否正确,但我试图使用标准的NSURLConnection类来处理调用我们的web服务后的响应。我正在使用POST方法更新数据库并使用GET方法从数据库检索行。问题是这两个操作可能同时发生,因此处理请求的方法可能会互相干扰。换句话说,在我的“connection didReceiveData”方法中,根据我是处理GET还是POST请求,代码有两条路径。
我通过一个名为requestType的实例变量跟踪正在处理的请求。问题是,由于请求同时被执行,实例变量在GET完成之前就被从GET更改为POST(反之亦然)。我的问题是如何在这种情况下维护两个单独的请求?我需要同步请求吗?线程是否适用于此处?我是否需要为每个请求创建两个单独的对象,并在“didRecieveData”中查询正在处理哪个对象的逻辑?非常感谢您的帮助!
3个回答

1

看起来你创建了一个试图做太多事情的混乱问题。我建议采取以下三种方法之一:

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

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

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

无论哪种方式,清晰的代码和明确的面向对象设计都将防止像您描述的那样出现混乱的情况。


1
在我们的一个应用程序中遇到了类似的问题。 解决方案涉及创建一个表示Web服务调用的类,负责调用自己的URL,加载自己的数据等。 调用类具有处理响应的代理(在我们的情况下是Web服务控制器)。 最终变得相当复杂,但防止了NSURLConnections彼此干扰的问题。

0
创建单独的对象来处理调用。如果您想一次发出多个请求,强烈建议查看NSOperationQueue,并将这些对象作为NSOperation的子类... 这是处理多个后台请求的更好方式。
这里有一个很好的例子:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接