多个NSURLConnection一个接一个地调用?

时间:2012-05-10 07:58:18

标签: iphone ios asynchronous nsurlconnection

好的,我已经尝试了很多不同的方法。我想调用JSON API,获取其响应,保存键值,然后使用不同的参数再次调用它。最近,我尝试在for循环中调用URL方法,在connectionDidFinishLoading:中发布NSNotification,在发布通知时在observer中发布NSLogging值。但它只能多次记录最终调用的值。

我用它来进行连接初始化......

 eventConnection=[[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]] delegate:self startImmediately:NO];
        [eventConnection scheduleInRunLoop: [NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
        [eventConnection start];

这是委托方法......

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
  NSNotification *eventNotification=[NSNotification notificationWithName:@"eventsFound" object:nil userInfo:responseDict];
        [[NSNotificationQueue defaultQueue]enqueueNotification:eventNotification postingStyle:NSPostNow coalesceMask:NSNotificationCoalescingOnName forModes:nil];
}

关于如何实现这一目标的任何建议?

4 个答案:

答案 0 :(得分:3)

要有效地链接多个NSURLConnection请求,您不应该立即启动它们(例如,就像你说“在for循环中”一样)。

相反,启动第一个请求;然后,从connectionDidFinishLoading开始第二个;然后,当再次执行connectionDidFinishLoading时,启动第三个,依此类推。

这只是一个草图,说明如何帮助您找到适合您应用的好设计;一种可能性是:

  1. 定义一个状态机,负责根据当前状态触发请求; (状态可以是一个简单的整数,代表你要去的顺序步骤);

  2. 启动状态机:它将触发第一个请求;

  3. 请求完成后,connectionDidFinishLoading将发出状态机信号,以便进入下一步;

  4. 在每一步中,状态机都会触发与该步骤对应的请求。

  5. 当然还有其他可能的设计选择;哪个最好将取决于您的总体要求和您需要的呼叫流程类型。

答案 1 :(得分:2)

设置计数器和要发送的请求总数。并且在连接完成加载时,检查是否达到计数器到要发送的请求总数,否则再次调用您发送数据的方法,并增加已发送的请求。如果你使用文件中的数据。即首先将数据写入文件wid一个数字,然后当你想发送请求时读取它,然后它就好了

答案 2 :(得分:0)

呜呜,

您是否尝试使用AFNetworking等库,您可以创建异步请求并使用块来处理答案。

答案 3 :(得分:0)

您可以使用NSOPerationQueue或Block或thread。完成后再调用另一个函数。