多个异步URL请求

时间:2011-04-10 10:34:25

标签: iphone url asynchronous connection nsurlrequest

我的iPhone应用程序在通过启动屏幕后一直“滞后”或“冻结”。我认为这是由于远程推送通知的注册是作为同步请求发送的,因此我想将其更改为异步。 这是一个问题,因为我已经发送了一个异步请求来检索一些数据并将其保存到手机中。 所以,我想异步发送这两个请求,让他们在- (void)connectionDidFinishLoading:(NSURLConnection *)connection中做两件事。因此,我需要知道完成的两个连接中的哪一个。

有没有办法做到这一点?是否有任何方法可以通过已完成连接的URL进行区分? 实际上,我认为这就像设置tag一样简单并在- (void)connectionDidFinishLoading:(NSURLConnection *)connection中检查一下,但这似乎不可能。

有谁知道我该怎么做?

3 个答案:

答案 0 :(得分:2)

正如Kalle所说,最好的办法是处理连接的类,解析响应,并在一个漂亮的委托函数中返回数据。

但是,如果由于某种原因必须使用相同的委托制作2个NSURLConnections,那么您要做的是在类ivars中保存对它们的引用。像NSURLConnection * pushNotificationConnection;和NSURLConnection * someOtherConnection;

然后,您的didReceiveData函数应该类似于:

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    if (connection == pushNotificationConnection)
    {
        // handle the push notification related data
    }
    else if (connection == someOtherConnection)
    {
        // handle the other connection
    }
}

答案 1 :(得分:0)

一种干净的方法是实际上每个请求都有一个单独的类句柄。或者更确切地说,你有一个应该执行请求的类,获取数据,然后一旦完成就将它们(通过委托)发送回主类。

因此,您将有两个班级,例如PushNotificationRequestorSomeLoader。每个人都会创建和维护他们自己独立的HTTP(或任何类型的)请求,并且每个都有自己独立的connectionDidFinishLoading:等方法。

答案 2 :(得分:0)

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
  if ([connection isEquals:pushNotificationConnection]) {
    // handle the push notification related data
  } else if ([connection isEquals:someOtherConnection]) {
    // handle the other connection
  }
}