2011-04-10 205 views
0

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

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

有谁知道我该怎么做?

+0

这是令人难以置信的容易做** ** ASIHttpRequest这是所有iPhone最常用的第三方库。你的问题解决了。 – Fattie 2011-04-10 10:49:55

回答

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 
    } 
} 
+0

这听起来很聪明。我对Objective-C非常陌生。你如何定义你的连接,以便能够比较它们? – simonbs 2011-04-10 14:05:24

+0

@SimonBS在你的viewController的.h文件中(或者是启动连接并充当委托的任何类) - define * pushNotificationConnection; NSURLConnection * someOtherConnection; 然后当触发连接时,适当地设置参考。例如pushNotificationConnection = [NSURLConnection connectionWithRequest:myPushNotificationsRequest];对另一个连接做同样的事情。然后比较从委托函数返回的连接与我的答案 – 2011-04-10 14:18:18

+0

中的示例中的那些连接。当然!非常感谢你。这解决了我的问题。我的应用程序在启动时不会“冻结”。 – simonbs 2011-04-10 16:02:25

0

一个干净的方式来做到这一点,实际上有一个单独的类处理每个请求。或者说,您有一个应该执行请求的类,获取数据,然后在完成后将它们发回(通过授权)到主类。

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

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 
    } 
} 
+1

请使用'{}'工具栏按钮格式化您的代码。另外,请解释您的代码如何解决问题。 – rgettman 2013-10-23 20:10:10