2011-04-10 204 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