好的,我已经尝试了很多不同的方法。我想调用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];
}
关于如何实现这一目标的任何建议?
答案 0 :(得分:3)
要有效地链接多个NSURLConnection请求,您不应该立即启动它们(例如,就像你说“在for循环中”一样)。
相反,启动第一个请求;然后,从connectionDidFinishLoading
开始第二个;然后,当再次执行connectionDidFinishLoading
时,启动第三个,依此类推。
这只是一个草图,说明如何帮助您找到适合您应用的好设计;一种可能性是:
定义一个状态机,负责根据当前状态触发请求; (状态可以是一个简单的整数,代表你要去的顺序步骤);
启动状态机:它将触发第一个请求;
请求完成后,connectionDidFinishLoading
将发出状态机信号,以便进入下一步;
在每一步中,状态机都会触发与该步骤对应的请求。
当然还有其他可能的设计选择;哪个最好将取决于您的总体要求和您需要的呼叫流程类型。
答案 1 :(得分:2)
设置计数器和要发送的请求总数。并且在连接完成加载时,检查是否达到计数器到要发送的请求总数,否则再次调用您发送数据的方法,并增加已发送的请求。如果你使用文件中的数据。即首先将数据写入文件wid一个数字,然后当你想发送请求时读取它,然后它就好了
答案 2 :(得分:0)
呜呜,
您是否尝试使用AFNetworking等库,您可以创建异步请求并使用块来处理答案。
答案 3 :(得分:0)
您可以使用NSOPerationQueue或Block或thread。完成后再调用另一个函数。