【问题标题】:How to call Main Thread after an asynchronous request异步请求后如何调用主线程
【发布时间】:2018-01-24 17:57:51
【问题描述】:

当我发出以下网络请求时,打印语句似乎在异步之前触发。请求已完成。我只在异步请求完成后才尝试调用主线程。

func getRating (articleID: String) {
    let endPointURL = "http://www.smarttapp.com/DesktopModules/DnnSharp/DnnApiEndpoint/Api.ashx?method=GetRating"
    let encodedarticleIDURL = endPointURL.addingPercentEncoding(withAllowedCharacters: CharacterSet.urlQueryAllowed)!
    let myURL = URL(string: encodedarticleIDURL)

    Alamofire.request(
        myURL!,
        parameters: ["articleID": articleID]
        )
        .responseData { response in
            guard response.result.isSuccess else {
                return
            }

            if let data = response.data, let myDataString = String(data: data, encoding: .utf8) {
                print("MyDataString is: \(myDataString)")
                let newRating = Double(myDataString)!
                self.post.rating = newRating
                print(newRating)
            }
    }
    DispatchQueue.main.async {
        print("Final value \(self.post.rating)")
        self.networkingState = .finishedSearching
        self.tableView.reloadData()
    }
}

【问题讨论】:

    标签: ios swift alamofire


    【解决方案1】:

    您需要在 Alamofire 响应完成块中执行主线程,它应该可以工作

    Alamofire.request(
            myURL!,
            parameters: ["articleID": articleID]
            )
            .responseData { response in
                guard response.result.isSuccess else {
                   return
                }
    
                if let data = response.data, let myDataString = String(data: data, encoding: .utf8) {
                    print("MyDataString is: \(myDataString)")
                    let newRating = Double(myDataString)!
                    self.post.rating = newRating
                    print(newRating)
                }
    
             DispatchQueue.main.async {
            print("Final value \(self.post.rating)")
            self.networkingState = .finishedSearching
            self.tableView.reloadData()
        }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多