2010-01-20 51 views
4

我有一個iPhone應用程序,它使用ASIHTTPRequest與我的服務器上的REST服務進行通信。當我在模擬器上運行時,它工作得很好,但是當我接觸到手機本身時,會出現奇怪的行爲。ASIHTTPRequest同步

第一次點擊啓動請求的按鈕,我立即得到結果,一切正常。從那時起,當我點擊按鈕啓動連接時,連接大約需要2-3分鐘。它幾乎看起來像我首先啓動的(並且我已經從中收到正確結果的)ASIHTTPRequest尚未完成。在開始下一個之前,是否需要使用某種魔法來終止原始請求?我認爲,既然-start方法返回,並且我有服務器的結果,原始請求已完成,我可以啓動另一個。

任何想法?

感謝

--Steve

回答

2

你不是想調用-start方法,它屬於的NSOperation。 ASIHTTPRequest接口是-startSynchronous或-startAsynchronous。

但是,強烈建議使用異步調用,否則,主線程(即UI)將被阻止。

從ASIHTTPRequest文檔[1]

通常,應該使用優先 異步請求 同步請求。當您從 主線程同步使用 ASIHTTPRequest時,您的應用程序的用戶 接口將鎖定,並在 請求的持續時間內變爲 不可用。同步請求只 真正適合的軟件沒有 UI(如從 端運行的腳本),或者如果你是從一個單獨的線程運行 請求 你維護(可能是從你 自己的NSOperation內,例如)。

[1] http://allseeing-i.com/ASIHTTPRequest/How-to-use

+0

我在12月下載的ASIHTTPRequest的版本沒有startSynchronous方法,只有-start方法。 我已經下載了最新版本的ASIHTTPRequest,並更改了使用startSynchronous的代碼,但效果是一樣的。 – Steve 2010-01-20 01:37:53

+0

切換到startAsynchronous沒有幫助。第一次呼叫通過後,每次後續呼叫均會失敗,並顯示「發生連接失敗」。基礎錯誤是超時。 – Steve 2010-01-20 02:11:50

+0

我已經更改了代碼,以便每個ASIHTTPRequest在單獨的隊列上運行。現在它大約有50%的時間工作,剩下的時間就會超時。 這變得令人沮喪。我應該放棄ASIHTTPRequest的電話並返回NSURLConnection來完成這項工作嗎? – Steve 2010-01-20 02:56:02

6

史蒂夫 - 你所描述什麼是,如果請求試圖保持一個持久連接,將出現一個普遍的問題。試試這個:

[request setShouldAttemptPersistentConnection:NO];