2010-01-22 35 views
1

該應用程序正在下載由服務器生成的文件(plist)。服務器花費大量時間來生成文件,所以我希望能夠顯示進度(可能查看UIProgressView,但這不重要)。幫助獲得NSURLConnection進度

由於我正在下載的文件尚未在請求開始時創建,因此我們不知道expectedContentLength。但是,我有辦法從[PHP]腳本本身提供進度更新。我爲文件中的每一行使用ob_flush()來做到這一點,這在瀏覽器中工作得很好。

但是,當我從應用程序發出請求後,腳本執行完畢後,我只接到connection:didReceiveData:的呼叫,所以沒有多大用處。

所以我的問題歸結爲:
我怎樣才能從我的應用程序進入這樣一個PHP腳本的進展?

我不介意向服務器發送2個請求,第一個生成文件並在此過程中提供更新,然後是另一個下載實際文件。

由於我的NSUrlConnection委託方法都沒有被調用,直到請求完成,我的腳本需要做什麼來觸發這些方法?

回答

1

您的問題很可能在服務器上。如果服務器在處理數據時正在發送數據,並且處理需要大量時間,則您可能會收到多個connection:didReceiveData:的通知。

有一些討論可能與PHP手冊相關。 http://php.net/manual/en/function.ob-flush.php

我會驗證使用數據包分析器,服務器實際上是遞增地發送數據,如您所料。

+1

ob_flush()適用於我的瀏覽器;我得到增量更新。但是,當從應用程序發出請求時,我將所有內容都放在一個塊中。 – kbanman

+0

WiFi還是3G?我們在這裏談什麼時間尺度?該腳本需要1秒鐘,還是> 10秒? –