ios - 如何检查 dataTaskWithRequest 是否完成?

标签 ios swift closures nsurlsession

我是 iOS 编程的新手,正在尝试创建我的第一个应用程序。我正在使用

从服务器获取一些数据
  var task = NSURLSession.sharedSession().dataTaskWithRequest(request,

        completionHandler: { (data, response, error) -> Void in

据我了解,completionHandler 闭包中的所有代码都是在任务完成时执行的。在我的 ViewController 中,我想检查此任务是否已完成,并且在完成之前不加载表。如何检查此任务是否已完成?

我想我可以让 completionHandler 在它运行时将一些全局 bool 变量设置为 true,我可以在我的 ViewController 中检查这个变量,但我觉得有一个更好的方法来使用内置功能,我只是不知道。

最佳答案

View Controller 不需要知道 completionHandler 何时被调用。您所做的就是让 completionHandler 实际上将 tableView.reload() 分派(dispatch)回主队列(然后触发调用 UITableViewDataSource方法)。启动 UI 更新的是 completionHandler,而不是相反:

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
    // check for errors and parse the `data` here

    // when done
    dispatch_async(dispatch_get_main_queue()) {
        self.tableView.reload()  // this results in all of the `UITableViewDataSource` methods to be called
    }
}
task.resume()

关于ios - 如何检查 dataTaskWithRequest 是否完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28665874/

相关文章:

ios - 如何为每个单元格设置自定义 Collection View 单元格间距

ios - 滚动所有 tableviewcell 内的所有 CollectionViewCell

jquery - 使用 jquery ajax 检索响应,同时保留 "this"的范围

ios - 如何知道 AfNetworking 是否已下载所有图像

ios - Postgres + Perfect + Swift 将 UIImage 上传为 Base64

swift - 如何使用 SwiftUI 让按钮和标签共享相同的宽度?

javascript - 封闭件损坏 - 请帮我修复它

循环内的 JavaScript 闭包 – 简单的实际示例

ios - 第一次更改 UITextField 属性 isSecureTextEntry 时键盘闪烁

ios - 自定义 Storyboard Segue 在模拟器中有效,但在设备上无效