2011-12-07 41 views
0

我試圖將我的iOS應用程序連接到從我的Web服務獲取數據,每次有所改變。我目前的實現是使用NSTimer並執行ASIHttpRequest,但我不喜歡該輪詢實現。有沒有更好的方法來做到這一點?使用asihttprequest獲取基於http狀態代碼的數據

我正在考慮啓動請求,並讓它繼續嘗試,直到Web服務狀態代碼變爲OK(狀態200)或可能是「已修改」的狀態代碼。我如何在視圖控制器中執行此操作?

這是我到目前爲止有:

self.asiRequest = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:self.barcodeUrl]]; 
[self.asiRequest setDelegate:self]; 
[self.asiRequest startAsynchronous]; 
[self.asiRequest addRequestHeader:@"Accept" value:@"application/json"]; 
[self.asiRequest addRequestHeader:@"Content-Type" value:@"application/json"]; 
int statusCode = [self.asiRequest responseStatusCode]; 

我知道,如果請求成功,委託方法- (void)requestFinished:(ASIHTTPRequest *)request

我想我的問題是,我該如何保持開放的ASIHttpRequest這樣當Web服務返回「修改」時,它會調用GET請求,然後再次保持打開的連接?這必須是異步的,並且不會在UI線程上運行,因爲我不想讓應用程序掛起。

非常感謝!

回答

0

最簡單的方法做到這一點,而不必在客戶端做很多事情是讓你的web服務發送一個Location:頭,當它返回「修改」,指向你想要的GET與新的URL內容。如果要監視的URL根據例如用戶ID或您所在應用程序的區域,創建一個監視器腳本,您可以在其中傳遞參數GET params來配置在返回「修改」時應返回給您的確切URL。

ASIHTTPRequest將自動GET在新Location:的內容,您可以在requestFinished:再次重新安排到監視器URL,明知響應(如果不爲空/「不修改」)將永遠是因爲新數據重定向到新數據發生在幕後。