Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 多个NSURLConnection调用一个接一个?_Iphone_Ios_Asynchronous_Nsurlconnection - Fatal编程技术网

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

Iphone 多个NSURLConnection调用一个接一个?,iphone,ios,asynchronous,nsurlconnection,Iphone,Ios,Asynchronous,Nsurlconnection,好的,我为此尝试了很多不同的方法。我想调用JSON API,得到它的响应,保存键值,然后用不同的参数再次调用它。最近,我尝试在for循环中调用URL方法,在connectionIDFinishLoading:中发布NSNotification,并在发布通知时在observer中记录NSLogging值。但它只是多次记录最终调用的值 我用它来初始化连接 eventConnection=[[NSURLConnection alloc]initWithRequest:[NSURLRequest re

好的,我为此尝试了很多不同的方法。我想调用JSON API,得到它的响应,保存键值,然后用不同的参数再次调用它。最近,我尝试在for循环中调用URL方法,在
connectionIDFinishLoading:
中发布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];
}

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

要有效地链接多个NSURLConnection请求,您不应该同时启动它们(例如,如您所说的“在for循环中”)

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

这只是一个草图,你可以这样做,以帮助你找到一个好的设计,为你的应用程序;一种可能性是:

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

  • 启动状态机:它将触发第一个请求

  • 当请求完成时,
    connectiondFinishLoading
    将向状态机发送信号,使其进入下一步

  • 在每个步骤中,状态机触发与该步骤对应的请求


  • 当然,还有其他可能的设计方案;哪个是最好的取决于您的总体需求和您需要的调用流类型。

    要有效地链接多个NSURLConnection请求,您不应该一次启动所有请求(例如,如您所说的“在for循环中”)

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

    这只是一个草图,你可以这样做,以帮助你找到一个好的设计,为你的应用程序;一种可能性是:

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

  • 启动状态机:它将触发第一个请求

  • 当请求完成时,
    connectiondFinishLoading
    将向状态机发送信号,使其进入下一步

  • 在每个步骤中,状态机触发与该步骤对应的请求


  • 当然,还有其他可能的设计方案;哪一个是最好的将取决于您的总体需求和您需要的呼叫流类型。

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

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

    Hum


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

    您可以使用NSOPerationQueue或块或线程来处理相同的问题。完成一个函数后调用另一个函数。

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

    [eventConnection scheduleInRunLoop:[NSRunLoop currentRunLoop]forMode:NSDefaultRunLoopMode];[事件连接启动];这不是假设一个接一个地顺序调用api吗?它们是按顺序启动的,比如:启动第一个;开始第二步;开始第三个。。。但您需要的是在第一次完成后启动第二次(而不仅仅是在第一次启动后)…[eventConnection scheduleInRunLoop:[NSRunLoop currentRunLoop]forMode:NSDefaultRunLoopMode];[事件连接启动];这不是假设一个接一个地顺序调用api吗?它们是按顺序启动的,比如:启动第一个;开始第二步;开始第三个。。。但是你想要的是在第一个已经完成之后开始第二个(而不仅仅是在第一个已经开始之后)。。。