代码之家  ›  专栏  ›  技术社区  ›  Skalwalker

等待调度信号时,将控制器视为弹出窗口

  •  3
  • Skalwalker  · 技术社区  · 7 年前

    func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        self.showPopUp() 
        let semaphore = DispatchSemaphore(value: 0)
    
        self.api.requestMedicationsByReagent(method: 1, ean: "", hash: medHash!, gen: generic) { output in
            semaphore.signal()
            self.objects = output
        }
         // Thread will wait here until async task closure is complete
         let _ = semaphore.wait(timeout: DispatchTime.distantFuture)
    }
    

    showPopUp的作用是:

    func showPopUp() {
        let popOverVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "loadingPopUp") as! PopUpViewController
    
        self.addChildViewController(popOverVC)
        popOverVC.view.frame = self.view.frame
        self.view.addSubview(popOverVC.view)
        popOverVC.didMove(toParentViewController: self)
    }
    

    1 回复  |  直到 7 年前
        1
  •  2
  •   Rob Md Fahim Faez Abir    7 年前

    问题是 wait 将阻塞主线程,直到信号量执行 signal ,在过程中阻塞UI(除其他外)。