2011-05-02 21 views
0

所以我正在研究這個應用程序,它爲iPhone請求和檢索web服務內容。我遇到的問題是這樣的:當我最初請求數據時,它被作爲一個獨立的線程產生,以便應用程序不會由於網絡緩慢而變得無響應。這意味着如果用戶在數據下載完成之前導航離開當前頁面,則可能會發生意想不到的情況。如何停止失控進程

我已經設法將問題範圍縮小到一個相對簡單的問題:我有一些嵌套表,所以如果用戶進入「消息」表,有時需要一些時間下載,然後返回立即取出,然後選擇一組不同的消息進行查看,之前的一組消息最終會加載,因爲它仍然在隊列中。

這件事情我已經嘗試:

1)我試圖取消操作,但這是徒勞的,因爲自從我只允許當時的隊列中的一個操作,就立即觸發

2 )我嘗試驗證數據的接收者是相同的,但這不起作用,因爲實際的表對象是兩個選擇之間的對象,它只需要一個不同的數據集。

任何人都有如何解決這個棘手的線程問題的一般編程建議?

在iPhone的特定筆記:如果我可以阻止用戶能夠退出郵件表,我不會有這個問題,因爲他們基本上會鎖定在該視圖,直到數據完成加載。

謝謝!

+0

你有線程的參考嗎?如果你有一個線程的引用,那麼你可以打斷它......當然,最好等待線程完成它所做的任何事情,但這取決於工作流程。 – Kiril 2011-05-02 21:08:09

回答

1

This post有一些關於iOS網絡和線程的設計建議。它的基本要點是「不要使用明確的線程」,我完全同意。 NSURLConnection具有很好的內置功能,可以在管理所有線程的同時異步加載URL中的數據。他們也可以隨意取消。

如果您要使用NSURLConnection範例,則只需在退出請求的視圖控制器時取消任何掛起的請求。

+0

我現在遇到的問題是請求不再處於待處理狀態,當這個開關發生時它們正在下載過程中,如果它已經啓動,我還可以取消請求嗎? – 2011-05-03 13:08:31

+0

我使用的代碼確實使用了NSUrlConnection ,但它產生了自己的線程,然後在該線程中使用了同步請求,這是一個非常簡單的改變,它可以在一個線程上完成,但是可以異步執行請求,並且我可以毫無問題地取消它。 ! – 2011-05-03 14:21:45

+1

太棒了,這正是你想要的:主線程上的異步和後臺線程中的同步,很高興它正在工作。 – 2011-05-03 16:13:05