0

好的,我为此尝试了很多不同的方法。我想调用一个 JSON API,获取它的响应,保存键值,然后用不同的参数再次调用它。最近,我尝试在 for 循环中调用 URL 方法,在发布 connectionDidFinishLoading: 通知时在观察者中发布 NSNotification 和 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

4 回答 4

3

为了有效地链接多个 NSURLConnection 请求,您不应该一次启动它们(例如,就像您说的“在 for 循环中”)。

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

这只是您如何帮助您找到适合您的应用程序的良好设计的草图;一种可能性是:

  1. 定义一个状态机,负责根据当前状态触发请求;(状态可以是一个简单的整数,表示您必须执行的顺序步骤);

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

  3. 当请求完成时,connectionDidFinishLoading将向状态机发出信号,使其进入下一步;

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

当然,还有其他可能的设计选项;哪个是最好的取决于您的整体要求和您需要的呼叫流程类型。

于 2012-05-10T08:03:57.150 回答
2

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

于 2012-05-10T08:04:23.047 回答
0

哼,

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

于 2012-05-10T08:58:09.823 回答
0

您可以使用 NSOPerationQueue 或 Block 或 thread 进行相同的操作。完成一个函数后调用另一个函数。

于 2012-05-10T09:18:07.923 回答