用于iPhone中的HTTP POST循环

时间:2011-03-24 17:59:26

标签: iphone objective-c http post

我正在为我创建的REST Web服务执行多个HTTP POST。然后,此POST将转换为INSERT到数据库中的表。该表有一个名为ROUTE_ORDER的列(自动递增)。此列保留POST进入的顺序(对我的应用程序的其他部分有用),它是一个值为1,2,3等的int。

我尝试使用条目的CURL逐个执行HTTP POST,它完全正常。但是我在我的XCode项目中有一个循环,它循环遍历一个数组,根据数组中的内容做一个POST并且命令搞砸了。以下是代码:

for (Location * loc in [self.data objectForKey:@"route"])
         [[RKObjectManager sharedManager] postObject:loc delegate:self];

所以我的想法是在POST的每次迭代之间设置一个时间间隔,以便先前的POST完成然后转到下一个,因此保留了ORDER。问题是如何在Objective-C中执行此操作?这甚至是问题吗?

4 个答案:

答案 0 :(得分:0)

我建议在项目中添加一个NSOperationQueue(它看起来像在rkobject单例中),最大连接数设置为1.然后,当你从循环内部发出服务调用时,你真的只是添加对队列的另一个操作。队列将管理迭代每个操作,一次一个,直到所有操作都完成。您还可以在将操作添加到队列后添加addDependency方法来识别硬依赖项。

答案 1 :(得分:0)

创建一个新类,该类将具有队列(发布请求数据的持有者)对象和计时器。 将您的所有请求添加到队列中。

每当您想要排队时添加数据然后启动计时器(可用于超时目的),当您从服务器接收数据时,立即检查您的队列以获取下一个服务器请求。

答案 2 :(得分:-1)

您的问题是您依靠网络连接来保留订购。而不是发出一系列请求,而是按照您希望插入的顺序发出包含要POST的数据的单个请求。然后编辑后端以接受此格式。这样,无论做什么(更快,更可靠),您都可以提出一个请求,并且数据总是正确排序。

答案 3 :(得分:-1)

我建议,而不是发出一个请求(可能非常大(不确定您的方案)),您仍然可以发出多个请求,但在请求中有一个订单参数,告诉服务器实际订单是什么请求是,所以服务器可以做相应的行为