Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift URLTask不发送任何UrlRequest_Swift_Url - Fatal编程技术网

Swift URLTask不发送任何UrlRequest

Swift URLTask不发送任何UrlRequest,swift,url,Swift,Url,我是swift新手,在swift 4.0中做了一个项目,从Fitbit API获取数据,但遇到了一个奇怪的问题,我的url任务不再发送任何url请求,而是跳过所有代码,直到task.resume,并且不返回任何内容。有人能帮我吗。代码如下所示 import UIKit class FitbitAPI{ static let sharedInstance : FitbitAPI = FitbitAPI() var parsedJson : [Any]? = nil func authoriz

我是swift新手,在swift 4.0中做了一个项目,从Fitbit API获取数据,但遇到了一个奇怪的问题,我的url任务不再发送任何url请求,而是跳过所有代码,直到task.resume,并且不返回任何内容。有人能帮我吗。代码如下所示

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()
 }
}

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


此外,在这个方法中,URL任务是一个局部变量。这意味着它完全有可能在这个方法的末尾,甚至在执行回调之前,从内存中释放出来。如果要确保任务在内存中保持活动状态足够长的时间,以命中完成回调,则需要在方法之外引用该任务。

它是同步的。将在.Thx之后调用中的闭包
[weak self](数据、响应、错误),以获得您的帮助。我将尝试使任务异步Lythx为您提供帮助,我尝试放置断点,xcode只是忽略其中的断点。我在这些代码的开头初始化了parsedJson,还有什么可以让内存保持足够长的时间?再次感谢您的耐心,AdvisewellXcode不会忽略您的断点。那不是一件事。为了让它在内存中保持活动状态,需要将任务(而不是JSON)分配给超出方法范围的变量。在这种情况下,FitBitAPI上的属性是最可能的位置。因此,创建一个类似于
private var authorizeAPITask:NSURLSessionDataTask?
的属性,它不会被忽略。如果您将断点放在
If let error=error
,但假设您的服务器运行缓慢,则可能需要几秒钟才能到达断点,而您的应用程序仍在其他地方运行。^Larme saidSry昨天睡着了,断点仍然不起作用,因此我尝试在游乐场上运行它,然而,比赛场地在这条线上没有任何输出,也跳到了终点