2016-08-18 51 views
1

我的項目在表格視圖中顯示元素。當用戶單擊一個單元格時,單元格展開以顯示更多信息(如App Store更新選項卡),並且如果用戶點擊該擴展單元格,單元格中引用的元素將在新頁面中打開(同樣,App Store )。然而,該元素必須先使用Alamofire請求下載,然後才能顯示。爲了加快速度,我在單元展開時開始下載元素,因此當用戶決定打開元素時,它可能已經完成下載。使用Alamofire在下載後處理用戶交互時的等待

但是這裏存在我的問題:一些元素很快下載,因此很可能在用戶打開元素時下載(第二次點擊)。但是有些元素要大得多,需要更長時間才能下載(最多6秒)。如果元素還沒有完成下載,我應該如何處理用戶輸入,而且,我應該如何實現它?

最簡單的方法是完全忽略用戶輸入,檢查元素是否每次點擊下載以啓動搜索。然而,忽視用戶以及他們必須以相同的意圖點擊不止一次的感覺是錯誤的。同樣,我在主線程上使用了dispatch_group_wait(),但它更糟,因爲它阻止了所有輸入。

我想什麼來實現如下:

  1. 第一次輕觸:開始下載請求,並在一個變量保留它(這已經完成)。我不想在啓動請求的completionHandler的SEGUE因爲我們還不知道,如果
  2. 第二分:

    一個。如果元素已經下載,啓動segue將其打開。

    b。如果該元素尚未完成下載,則推遲啓動segue至下載結束。

我知道這個問題是非常大的,所以要縮小它:是否有可能實現上述邏輯?怎麼樣?

回答

1

您可以使用shouldPerformSegueWithIdentifier:函數來取消segue。

實現此功能並使用它來取消segue,如果該項尚未下載並且還設置了下載完成處理程序可以檢查的標誌。

下載完成後,如果設置了標誌,則完成處理程序可以執行segue。

你或許應該也顯示出某種活動的指標,使用戶知道數據加載

+0

太謝謝你了!我知道有一個簡單的方法,但我從錯誤的一面看問題,只關注關閉和Alamofire。我已經爲我以前的嘗試實施了標誌和活動指標,但你的答案是我的謎題中缺少的一部分;)乾杯 –