2012-10-17 20 views
3

我正在嘗試刷新UIProgressView中的進度欄​​以獲取NSURLConnection的上傳請求。目標是在上傳圖片的同時刷新進度條。經過幾次的搜索,我設法用我的連接委託的didSendBodyData檢查這樣的進展:當使用NSURLConnection上傳時,將進度設置爲UIProgressView

- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite 
{ 
    if([self.delegate respondsToSelector:@selector(progressView)]) 
    { 
     self.delegate.progressView.progress = (totalBytesWritten/totalBytesExpectedToWrite) * 100.0; 
    } 
} 

一切工作正常,但問題是,這種方法只調用一次......所以酒吧暫時停留在0%,然後立即轉爲100%而不需要中間。我嘗試過(使用iPhone上的iOS6 develloper工具)將我的連接設置爲慢速連接,以判斷上傳是否太快,但不是,上傳需要一段時間,然後立即變爲100%該方法只被稱爲一次...

任何想法請嗎?謝謝 !我不知道如何解決這個問題...

回答

4

你應該真正閱讀數字類型的C教程。推測totalBytesWrittentotalBytesExpectedToWrite是一個整數類型,所以將它們分開將會導致截斷 - 也就是說,結果的小數部分將會消失。除非結果爲100%,否則積分部分始終爲0,因此所有這些分數都將爲零。嘗試將一個或兩個變量投射到floatdouble以獲得明智的結果。

此外,UIProgressView默認情況下不接受0到100之間的值,但所有的一切0和1之間,你應該寫

self.delegate.progressView.progress = ((float)totalBytesWritten/totalBytesExpectedToWrite); 

,它應該工作的罰款。

編輯:問題在於您試圖上傳的數據太小,並且不需要將其細分爲更小的塊,因此有必要僅調用一次該方法。如果您提供了大量的數據,那麼它將只能以單獨的部分發送,因此進度處理程序回調將被多次調用。

+0

謝謝你的回答,是的,我明白我的錯誤在這裏,但問題不是這一個......我的行當然是錯誤的,但問題是當我'NSLog'調用方法來檢查' bytesWritten','totalBytesWritten'和'totalBytesExpectedToWrite',我清楚地看到該方法只被調用一次,所有的值都等於'totalBytesWritten',所以沒有進展,只有0到100 ... –

+0

@FabienParseError也許數據太小而不能以較小的塊切割。 – 2012-10-17 20:20:14

+0

謝謝@ H2CO3!就是這樣!我試圖同時上傳10張照片,現在進度條顯示中間體;)對不起,感謝您的幫助! –

相關問題