NSURLSessionDownloadTask
を作成し、後でそれが完了する前にキャンセルした場合、完了ブロックがまだ起動しているように見えます。
let downloadTask = session.downloadTaskWithURL(URL, completionHandler: { location, response, error in
...
}
このブロック内でダウンロードタスクがキャンセルされたかどうかを確認して、ダウンロードがない場合に結果のダウンロードを操作しないようにするにはどうすればよいですか?
ダウンロードタスクの場合、完了ハンドラはnil
のlocation
値で呼び出され、code
オブジェクトのNSError
値はNSURLErrorCancelled
。 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()
またはSwift 2:
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()
データタスクの場合と同様に、完了ハンドラは、キャンセルされたかどうかを示すError
/NSError
を使用して呼び出されます。 Swift 3:
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()
またはSwift 2:
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()