9

Bir NSURLSessionDownloadTask oluşturur ve sonra tamamlanmadan önce iptal ederseniz, tamamlama bloğu hala görünüyor.Tamamlama işleyicisi bloğunda iptal edilen NSURLSessionTask ile bir anlaşma nasıl yapılır?

let downloadTask = session.downloadTaskWithURL(URL, completionHandler: { location, response, error in 
    ... 
} 

nasıl bir olmadığı zaman çıkan indirmek ameliyat etmeye kalkma, böylece indirme görevi bu blokta içinde iptal edilip edilmediğinden kontrol ederim? indirme görevi için

cevap

23

, tamamlama işleyici NSURLErrorCancelled olacak location için nil değeri ve NSError nesnenin code değeri ile çağrılır. Swift 3:

let task = session.downloadTask(with: url) { location, response, error in 
    if let error = error as? NSError { 
     if error.code == NSURLErrorCancelled { 
      // canceled 
     } else { 
      // some other error 
     } 
     return 
    } 

    // proceed to move file at `location` to somewhere more permanent 
} 
task.resume() 

ya Swift 2

:

veri görevleri için Aynı şekilde
let task = session.downloadTaskWithURL(url) { location, response, error in 
    if let error = error { 
     if error.code == NSURLErrorCancelled { 
      // canceled 
     } else { 
      // some other error 
     } 
     return 
    } 

    // proceed to move file at `location` to somewhere more permanent 
} 
task.resume() 

, tamamlama işleyicisi iptal olup olmadığını belirten bir Error/NSError ile çağrılır. Swift 3: Bir indirme görev için

let task = session.dataTaskWithURL(url) { data, response, error in 
    if let error = error { 
     if error.code == NSURLErrorCancelled { 
      // canceled 
     } else { 
      // some other error 
     } 
     return 
    } 

    // otherwise handler data here 
} 
task.resume() 
+0

Ne hakkında:

let task = session.dataTask(with: url) { data, response, error in if let error = error as? NSError { if error.code == NSURLErrorCancelled { // canceled } else { // some other error } return } // proceed to move file at 'location' to somewhere more permanent } task.resume() 

Veya Swift 2'de

? Yer sıfır olacak mı? Yoksa sadece hataya bağlı mıyım? –

+0

Evet, 'location'' 'nil' olacak, ancak' 'error' 'i kontrol edebilirsiniz ve' code' 'NSURLErrorCancelled' ise, bir sebepten ötürü iptal edildiğini biliyorsunuz. – Rob