2016-01-26 2 views
0

Я хочу отменить загрузку данных из Интернета, если это занимает более 10 секунд, потому что есть только один текст.Отмена загрузки после 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 
    } 
} 

Спасибо!

+0

Почему это не работает? Запустите «таймер» сразу после метода отправки. Используйте 'timer.invalidate', чтобы остановить таймер. – MikeG

+0

, потому что нет ничего, где '// stop loading' – aaisataev

+0

О, название вопроса заставило его звучать так, как будто оно связано с синхронизацией или связано с таймером – MikeG

ответ

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

По Доку ..

timeoutIntervalForRequest - интервал ожидания для использования при ожидании дополнительных данных. Таймер, связанный с этим значением, сбрасывается всякий раз, когда поступают новые данные. Когда таймер запроса достигает указанного интервала без получения каких-либо новых данных, он вызывает таймаут.

timeoutIntervalForResource - Максимальное время, в течение которого запрос ресурса должен быть разрешен. Это значение определяет, как долго ждать передачи всего ресурса перед тем, как сдаться. Таймер ресурса запускается, когда запрос инициируется и рассчитывается до тех пор, пока не будет завершен запрос или этот интервал таймаута не достигнут, в зависимости от того, что наступит раньше.

+0

теперь оно работает, но как поймать ошибку, приложение просто падает? – aaisataev

+0

catch let error as NSError { print (ошибка.localizedDescription) } – Bhoomi

+0

Спасибо .., что возвышение может быть поощрением – Bhoomi