URLTask不发送任何UrlRequest

时间:2018-04-23 18:10:49

标签: swift url

我是swift的新手,在swift 4.0中做一个项目从Fitbit API获取数据并得到一个奇怪的问题,我的url任务不再发送任何urlrequest但跳过所有代码直到task.resume,并且不什么都回来了。任何人都可以帮助我PLZ。代码如下所示

import UIKit
class FitbitAPI{
static let sharedInstance : FitbitAPI = FitbitAPI()

var parsedJson : [Any]? = nil


func authorize(with token: String){
    let accessToken = token
    let baseURL = URL(string: "https://api.fitbit.com/1/user/-/activities/steps/date/today/1m.json")
    let request = NSMutableURLRequest(url:baseURL!)
    let bodydata = "access_token=\(String(describing: accessToken))"
    request.httpMethod = "GET"
    request.setValue("Bearer \(String(describing: accessToken))", forHTTPHeaderField: "Authorization")
    request.httpBody = bodydata.data(using: String.Encoding.utf8)
    let task = URLSession.shared.dataTask(with: request as URLRequest, completionHandler: {[weak self] (data, response, error) in
        if let error = error {
            print(error)
        }
        if let data = data, error == nil{
            do {

                self?.parsedJson = (try JSONSerialization.jsonObject(with: data, options: []) as? [Any] )
                print(String(describing: self?.parsedJson))

            }catch _{
                print("Received not-well-formatted JSON")
            }

        }
        if let response = response {
            let httpResponse = response as! HTTPURLResponse
            print("response code = \(httpResponse.statusCode)")

        }


    })
    task.resume()
 }
}

1 个答案:

答案 0 :(得分:0)

正如@Larme在评论中暗示的那样,let task =行和task.resume()行之间的所有代码都是回调。意味着在任务完成之前它不会被调用。将断点放在该回调中(例如在if let error = error line上),看看它们是否被击中。

此外,您的URL任务是此方法中的局部变量。这意味着在回调甚至可以执行之前,它完全有可能在此方法结束时从内存中释放。如果你想保证它在内存中保持足够长的时间以达到完成回调,你需要在方法之外引用任务。