【问题标题】:ios Cancel NSURLConnection Swiftios 取消 NSURLConnection Swift
【发布时间】:2016-07-14 21:47:32
【问题描述】:

我有以下代码:

func getStoryContent( cityID : String, completionHandler: (loaded: Bool, dataNil: Bool) -> ()) -> () {
    let scriptUrl = "***"
    var user_id = "nil"
    if let userID = NSUserDefaults.standardUserDefaults().stringForKey("userId") {
        user_id = userID
    }
    var params =  ***
    let myUrl = NSURL(string: scriptUrl);
    let request: NSMutableURLRequest = NSMutableURLRequest(URL: myUrl!)
    request.HTTPMethod = "POST"
    let data = params.dataUsingEncoding(NSUTF8StringEncoding)
    request.timeoutInterval = 10
    request.HTTPBody=data
    request.HTTPShouldHandleCookies=false
    let queue:NSOperationQueue = NSOperationQueue()
    NSURLConnection.sendAsynchronousRequest(request, queue: queue, completionHandler:{ (response: NSURLResponse?, data: NSData?, error: NSError?) -> Void in
        do {
            ....code.....

当向用户显示图像幻灯片时,它会在后台运行,它基本上会下载更多要显示的图像并将它们附加到图像数组中。问题是用户可以随时退出幻灯片,在这种情况下我需要取消这个NSURLConnection。我有一个函数,当用户想要退出幻灯片时执行,但我不确定要添加什么代码来正确取消此连接。

【问题讨论】:

    标签: ios swift asynchronous nsurlconnection


    【解决方案1】:

    NSURLConnectionsendAsynchronousRequest 不是可取消的请求。但无论如何,NSURLConnection 已被弃用,您应该使用NSURLSession。而NSURLSessiondataTask 是可以取消的。

    所以,而不是:

    NSURLConnection.sendAsynchronousRequest(request, queue: queue) { response, data, error in
        do {
            ....code.....
        } 
    }
    

    你可以使用:

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { data, response, error in
        do {
            ....code.....
        } 
    }
    task.resume()
    

    而且,如果你需要取消它,你可以做task.cancel()

    【讨论】:

    • 我还可以使用完成处理程序吗,它对我来说是代码的必需部分
    • 是的,就像我上面说明的那样。请注意,参数的顺序是不同的,但首先是data。但除此之外,它非常相似。关于队列,sharedSession 默认为串行后台队列(但如果您想指定自己的队列,可以使用NSURLSessionConfiguration 实例化自己的NSURLSession)。但是默认的后台队列应该没问题。
    猜你喜欢
    • 1970-01-01
    • 2014-08-02
    • 2016-08-19
    • 1970-01-01
    • 2015-07-23
    • 2018-05-25
    • 1970-01-01
    • 2012-09-19
    • 1970-01-01
    相关资源
    最近更新 更多