2011-07-16 97 views
1

我正在構建一個應用程序,在其中執行搜索,並且我想要預覽文檔,顯示圍繞第一個搜索詞的段落。這些文檔的大小可能爲20或30K,但由於它可能會返回100個結果,因此我想盡量減少通過3G連接進入的數據量。ASIHTTPRequest:限制下載大小

我正在這樣做是爲了獲取文檔:

__block ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:urlAddress]]; 
    __block NSString *responseString; 
    [request setCompletionBlock:^{ 
     responseString = [[request responseString] copy]; 

     _preview = responseString; 
    }]; 

    [request startSynchronous]; 

這一切工作正常,但抓住了整個文檔。我想要做的只是抓住搜索關鍵字所在的地方。有沒有辦法:a)看看數據到達後會傳入什麼數據,以便我可以檢查是否有匹配;和b)一旦我有一場比賽,取消下載,只處理到目前爲止的內容?

回答

4

嘗試設置didReceiveDataSelector。這個選擇器將在請求收集數據時被調用。因此,您可以存儲所有收到的數據,並在每次請求接收新數據部分時檢查其大小。您也可以在所有數據中搜索關鍵字。
但是,這將阻止ASIHTTPRequest填充responseData或將數據寫入downloadDestinationPath。所以你必須自己儲存迴應。

+0

豔麗;我會放棄這個!有沒有辦法從那裏取消下載? –

+0

是的。要停止請求,可以使用'[請求取消]'方法或[請求clearDelegatesAndCancel]'方法。第二種方法不會觸發didFinishSelector。 – VenoMKO