10秒后取消加载

时间:2016-01-26 05:23:33

标签: ios swift

如果需要超过10秒,我想取消从互联网上加载数据,因为只有一个文本。

let date_start = NSDate()

let jsonUrl = "http://example.com"
let session = NSURLSession.sharedSession()
let shotsUrl = NSURL(string: jsonUrl)
let task = session.dataTaskWithURL(shotsUrl!) {
  (data, response, error) -> Void in
    do {
      let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableLeaves ) as! NSDictionary
      // saving data
      dispatch_async(dispatch_get_main_queue(), {
        self.tableView.reloadData()
        print("getJson: \(-date_start.timeIntervalSinceNow)")
      });

    } catch _ {
      // Error
    }
}
task.resume()

无法弄清楚如何停止加载,我想要这样的东西

var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("check"), userInfo: nil, repeats: true)

func check() 
{
    if -date_start.timeIntervalSinceNow) > 10.0 {
        // stop loading
    }
}

谢谢!

1 个答案:

答案 0 :(得分:1)

let urlconfig = NSURLSessionConfiguration.defaultSessionConfiguration()
urlconfig.timeoutIntervalForRequest = 10
urlconfig.timeoutIntervalForResource = 10
self.session = NSURLSession(configuration: urlconfig, delegate: self, delegateQueue: nil)

据Doc ...

timeoutIntervalForRequest - 等待其他数据时使用的超时间隔。每当新数据到达时,与该值相关联的定时器将被重置。当请求计时器达到指定的时间间隔而没有收到任何新数据时,它会触发超时。

timeoutIntervalForResource - 应允许资源请求的最长时间。此值控制在放弃之前等待整个资源传输的时间。资源计时器在请求启动时启动并计数,直到请求完成或达到此超时间隔,以先到者为准。