ASIHTTPRequest 進度追蹤

2021-06-06 09:23:57 字數 2574 閱讀 9115

每個asihttprequest有兩個delegate用來追蹤進度:

uploadprogressdelegate (上載).

進度delegate可以是nsprogressindicators (mac os x) 或者 uiprogressviews (iphone).asihttprequest會自適應這兩個class的行為。你也可以使用自定義class作為進度delegate,只要它響應setprogress:函式。

important:如果你向乙個要求身份驗證的**上傳資料,那麼每次授權失敗,上傳進度條就會被重置為上一次的進度值。因此,當與需要授權的web伺服器互動時,建議僅當usesessionpersistence為yes時才使用上傳進度條,並且確保你在追蹤大量資料的上傳進度之前,先使用另外的request來進行授權。 

這個例子中, myprogressindicator是個 nsprogressindicator.

nslog(@"max: %f, value: %f", [myprogressindicator maxvalue],[myprogressindicator doublevalue]);在這個例子中, myprogressindicator 是個 uiprogressview, myqueue是個 asinetworkqueue.

- (void)fetchthisurlfivetimes:(nsurl *)url

[myqueue go];

}- (void)queuecomplete:(asinetworkqueue *)queue

這個例子中,我們已經為asinetworkqueues呼叫過[myqueue go]了。

在這個例子中, myprogressindicator 是個 uiprogressview。

asiformdatarequest *request = [asiformdatarequest requestwithurl:url];

[request setpostvalue:@"ben" forkey:@"first_name"];

[request setpostvalue:@"copsey" forkey:@"last_name"];

[request setuploadprogressdelegate:myprogressindicator];

[request startsynchronous];

nslog(@"value: %f",[myprogressindicator progress]);

這個例子中, myprogressindicator是個 nsprogressindicator, myqueue是個asinetworkqueue.

- (void)uploadsomethingfivetimes:(nsurl *)url

[myqueue go];

}- (void)queuecomplete:(asinetworkqueue *)queue

asihttprequest提供兩種進度條顯示,簡單進度條和精確進度條,使用asihttprequests 和asinetworkqueues的showaccurateprogress 來控制。為乙個request設定showaccurateprogress只會對該request有效。如果你為乙個佇列設定showaccurateprogress,那麼會影響佇列裡所有的request。

當使用簡單進度條時,進度條只會在乙個request完成時才更新。對於單個request,這意味著你只有兩個進度狀態:0%和100%。對於乙個有5個request的佇列來說,有五個狀態:0%,25%,50%,75%,100%,每個request完成時,進度條增長一次。

簡單進度條(showaccurateprogress = no)是asinetworkqueue的預設值,適用於大量小資料請求。

使用精確進度條追蹤上傳會輕微降低介面效率,因為進度delegate(一般是uiprogressviews 或nsprogressindicators)會更頻繁地重繪。

精確進度條(showaccurateprogress = yes)是以同步方式執行的asihttprequest的預設值。

asiprogressdelegate 協議定義了所有能更新乙個request進度的方法。多數情況下,設定你的uploadprogressdelegate或者 downloadprogressdelegate為 nsprogressindicator或者uiprogressview會很好。但是,如果你想進行更複雜的追蹤,你的進度delegate實現下列函式要比 setprogress: (ios) 或者 setdoublevalue: / setmaxvalue: (mac)好:

ASIHttpRequest 傳送資料

傳送資料 request addrequestheader referer value 檔案中的資料是需要時才從磁碟載入,所以只要web server能處理,那麼上傳大檔案是沒有問題的。asiformdatarequest request asiformdatarequest requestwith...

ASIHttpRequest 傳送資料

傳送資料 request addrequestheader referer value 檔案中的資料是需要時才從磁碟載入,所以只要web server能處理,那麼上傳大檔案是沒有問題的。asiformdatarequest request asiformdatarequest requestwith...

ASIHttpRequest 傳送資料

傳送資料 request addrequestheader referer value 檔案中的資料是需要時才從磁碟載入,所以只要web server能處理,那麼上傳大檔案是沒有問題的。asiformdatarequest request asiformdatarequest requestwith...