2011-09-28 102 views
0

我最近將我的後臺同步下載移動到視圖控制器,並需要一些關於如何最好地處理它們異步的建議。我已經編寫了所有代碼,以便在下載過程中顯示進度視圖,但您可能已經猜到它並不那麼簡單。這是它的工作原理。如何處理多個異步下載

用戶看到一個tableview,每個數據庫有兩個entires。他們可以按下按鈕來下載數據庫,並在下載開始時觸發異步URL連接等。這在一定程度上起作用,但並不那麼簡單。

這是我想要它做的。

  1. 下載主更新URL(工作正常)
  2. 然後下載一個輔助URL。
  3. 然後應用第一URL內容sqlite的存儲(代碼爲書面)
  4. 再申請第二個URL內容sqlite的存儲(代碼爲書面)

(所有的同時顯示進度給用戶)

當下載同步時,這很容易,因爲我只是等待他們完成以便關閉下一個活動,但是當使用異步方法時,我正在努力如何讓他們等待。步驟3取決於步驟1完成,步驟4取決於步驟2完成,並且總體成功取決於所有完成。步驟4需要等待步驟3完成,否則數據庫鎖定將導致衝突。

第二個複雜情況是,如果用戶在第一個下載時按下第二個按鈕,則步驟3,4如果在第一行訪問數據庫的同時執行,則會發生衝突。

有沒有人做過類似的事情,如果有的話,你用什麼策略來管理事件流。

另外我想用ExpirationHandler把它全部包裝在一個backgroundTask中,這樣它可以在用戶按下主頁按鈕的時候生存......但是當我這樣做時,委託方法不會被調用。

回答

0

好的這是我做了什麼來解決這個問題。

  1. 創建了一個NSOperationQueue
  2. 新增的URL操作爲NSURLInnvocationOperations 3.waited直到URL的操作是完全的(waituntilalloperationsarefinished)。

然後將最大併發計數設置爲1,強制後續數據庫操作依次執行,從而阻止SQLite鎖定自己。