2012-09-27 53 views
0

對不起,打擾了另一個NSURLConnection問題,已經在這裏添加了一千多個。如何等待NSURLConnection的某個狀態

該場景如下。在使用動態加載的增強現實功能的iPhone應用程序中,提示用戶下載新的AR模型,因爲這些模型可用。這些模型可能有幾MB大,所以應該在決定之前給用戶指示所有要下載的模型的總大小。

要了解每個文件有多大,我想使用異步NSURLConnection,但一旦得到響應([NSURLResponse expectedContentLength]),然後停止下載。我可以在委託的連接中做到這一點:didReceiveResponse:方法。

我的問題是,我該如何等待,直到出現這種情況?我如何設置NSURLConnection,讓它異步啓動,然後等待連接:didReceiveResponse:方法被調用?我已經嘗試過使用NSCondition,在設置NSURLConnection之後讓它等待,並在連接中發出:didReceiveResponse:方法,指示條件。但所有這些都是爲了凍結主線程。有任何想法嗎?

回答

1

也許你可以發送一個HEAD請求,而不是GET。這可能取決於您的服務器設置,但是這應該只讓您獲得標題,包括Content-Length。您應該能夠使用NSMutableURLRequest,以便您可以更改請求方法,然後像往常一樣讀取響應中的expectedContentLength。

+0

Thx Brian,我想知道如何發送HEAD請求。如果我這樣做了,那麼我可以使用一個同步NSURLConnection - 具有適當的超時 - 等待它完成,然後讀出expectedContentLength。謝謝你的提示。 –

+0

只要說你的建議測試罰款後恢復工作。我建立了一個NSMutableURLRequest,將方法改爲HEAD,做一個NSURLConnection sendSynchronousRequest,並從響應中讀取expectedContentLength,所有這些都沒有任何線程,GCD或回調函數。十分優雅。再次感謝。 –