2012-04-22 71 views
0

鏈接異步NSURLConnections最合適的方式是什麼?例如,我需要使用Web服務註冊用戶。工作流程如下: 獲取註冊令牌=>使用令牌註冊=>獲取登錄令牌=>使用令牌登錄。如何鏈接異步NSURLConnections?

我知道如何創建一個異步NSURLConnection,但我不確定如何在繼續之前確保先前的連接已完成。我知道我可以使用NSURLConnection sendSynchronousRequest來實現這個目標,但是我不喜歡我的主線程在這些鏈接請求發生時被阻塞。

回答

2

當我們爲iPhone構建我們的第一版SignMeOut時,我們做了EXACTLYA。我們創建了一個NSUrlconnection的子類,並在connectionDidFinish中爲它提供了一個標識標記,您可以使用一個簡單的開關/一個枚舉枚舉。偉大的工程 - 你可以看到在我們的博客

http://www.isignmeout.com/multiple-nsurlconnections-viewcontroller/

UPDATE

我已經修改了NSURLConnection的子類到一個更簡單的範疇整個流程和示例和代碼。大多數使用的是相同的,但使用相同的類

https://github.com/Shein/Categories

+0

棒極了!非常感謝您花時間發佈此信息。 – squarefrog 2012-04-22 14:28:08

+0

很高興它對別人有用:)讓我知道它是如何爲你工作的 – shein 2012-04-22 14:48:31

+0

就像更新,嘗試這個更早,效果很好!完美解決方案 – squarefrog 2012-04-22 22:47:16

1

您可以查看connectionDidFinishLoading以啓動另一個異步連接。對於哪些連接結束的條件,如果其他連接也預計完成(可能不需要您的情況),您可以保留對連接的引用。讓你的班級遵循NSURLConnectionDelegate並在connectionDidFinishLoading委託方法中觸發適當的連接。您也可以使用connectionDidReceiveData:方法檢查從服務收到的憑證等。也請通過documentation

+0

十分感謝吸塵器!你會如何建議分拆這些方法?例如,我有兩個主要場景。 1)用戶正在註冊,這將需要上述四個條件,2)用戶正在登錄,我們將只需要最後兩個連接。 'BOOL isRegistering' iVar或其他適當的東西? – squarefrog 2012-04-22 14:21:27

+0

當然,如果適合你,使用bools也可以... – tipycalFlow 2012-04-22 14:25:39

1

你有不同的選擇:

  • 創建使用可變數組或字典
  • 如果您在組合 新只使用它的ios5 API爲NSURLConnection的
  • 創建一個NSOperationQueue那種輕鬆隊列
  • 第三方庫如AFNetworking
  • 塊GCD分組他們(很難爲NSRunLoop的原因,注意在哪個線程連接運行)
+0

好極了。很高興知道所有的選擇! – squarefrog 2012-04-22 14:36:45