【问题标题】:How to stop task or section from NSURLSession如何从 NSURLSession 停止任务或部分
【发布时间】:2017-10-02 18:16:44
【问题描述】:

我正在使用 NSURLSession 调用发布 API,但是当我打开 wifi 然后点击 Web 服务并再次打开 wifi NSURLSession 正在调用之前调用的 Web 服务时,我想停止这个过程。我阅读了一些文档,当在任何情况下连接中断时,NSURLSession 存储每个服务调用的部分,并在再次建立连接时再次点击该服务。所以现在我没有得到任何解决方案来在重新连接到我的设备后停止该服务调用。 任何人请帮助我。提前致谢。

以下是我使用的代码。

            let token: NSString!

            let urlPath: NSURL!

            if provider .isEqualToString("No"){
                urlPath  = NSURL(string: kAPI_SERVERBASEURL + (url as String))
            }
            else{
                urlPath  = NSURL(string: kAPI_SERVERBASEURLSEARCHPROVIDER + (url as String))
            }

            var postJsonData = NSData()
            var jsonString   = NSString()

            do {
                postJsonData = try NSJSONSerialization.dataWithJSONObject(dictRequest, options:[])
                jsonString = NSString(data: postJsonData, encoding: NSUTF8StringEncoding)!
                NSLog("request - %@", jsonString);

                // do other stuff on success

            } catch {
                print("JSON serialization failed:  \(error)")
            }

            let request = NSMutableURLRequest(URL: urlPath);
            request.cachePolicy = NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData
            request.HTTPShouldHandleCookies = false
            request.timeoutInterval = 120 ;
            request.HTTPMethod = "POST";

            if NSUserDefaults.standardUserDefaults().valueForKey(kAccessToken) != nil{

                token = NSUserDefaults.standardUserDefaults().valueForKey(kAccessToken) as! NSString
                //token = "tk_1vNoEoZRxJwY"
                request.setValue("\(token)", forHTTPHeaderField: "access_token")
            }

            request.addValue("application/json", forHTTPHeaderField: "Content-Type")
            request.HTTPBody = postJsonData
            let session = NSURLSession.sharedSession()
            let task = session.dataTaskWithRequest(request) { (data:NSData?, response:NSURLResponse?, error:NSError?) -> Void in

`

【问题讨论】:

标签: ios swift nsurlsession


【解决方案1】:

也许对你有帮助。

1.声明一个关于NSURLSessionTask的变量

var task: NSURLSessionTask? = nil

2.当您需要调用 dataTaskWithRequest 时,将对象分配给已声明的对象,例如

task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(fileURLWithPath: ""))

3.当您想取消请求时,只需执行以下操作。

if nil != task {
    task!.cancel()
    task = nil
}

假设您想在调用另一个请求之前取消请求,结合 2 和 3 个步骤,例如

if nil != task {
    task!.cancel()
    task = nil
}
task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(fileURLWithPath: ""))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 2020-12-25
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多