Overview 概要
Your app or the user may need to cancel an in-progress download and resume it later. By supporting resumable downloads, you save both the user’s time and network bandwidth. あなたのアプリまたはユーザは、処理中のダウンロードを取り消してそれを後で再開する必要があるかもしれません。再開可能なダウンロードをサポートすることによって、あなたはユーザのもつ時間とネットワークバンド幅の両方を節約します。
You can also use this technique to resume a download that fails due to a temporary loss of connectivity. あなたはまた、このテクニックを使って、接続性の一時的喪失のために失敗するダウンロードを再開します。
Store the Resume Data Object When You Cancel the Download 再開データオブジェクトをあなたがダウンロードを取り消す時に格納する
You cancel a URLSession
by calling cancel(by
. This method takes a completion handler which is called once the cancellation is complete. The completion handler receives a resume
parameter. If it it not nil
, this is the token you use later to resume the download. Listing 1 shows how to cancel a download task and store resume
, if it exists, in a property.
あなたは、URLSession
をcancel(by
を呼び出すことによって取り消します。このメソッドは、ある完了ハンドラを取ります、それはひとたび取り消しが完了するすれば呼び出されます。完了ハンドラは、あるresume
パラメータを受け取ります。それがnil
でないならば、これはあなたが後で使ってダウンロードを再開するトークンです。コード出力 1 は、どうやってダウンロードタスクを取り消して、もしそれが存在するならば、resume
をあるプロパティに格納するかを示します。
Important 重要
Not all downloads can be resumed. See the discussion in cancel(by
for a list of conditions that must be met for a download to be resumable. Also, downloads that use a background configuration will handle resumption automatically, so manual resuming is only needed for non-background downloads.
全てのダウンロードが再開できるわけではありません。cancel(by
での議論を、ダウンロードが再開可能であるために満たされなければならない条件のリストとして見てください。また、バックグラウンド構成設定を使うダウンロードは、再開を自動的に取り扱うでしょう、それで手動での再開は非バックグラウンドダウンロードに対して必要とされるだけです。
Store the Resume Data Object When a Download Fails 再開データオブジェクトをあるダウンロードが失敗する時に格納する
You can also resume a download that has failed due to a temporary loss of connectivity, as when the user walks out of WiFi range. あなたはまた、接続性の一時的喪失のために失敗したダウンロードを再開できます、ユーザがWiFi範囲を出て行く時のように。
When the download fails, the session calls your url
delegate method. If error
is not nil
, look in its user
dictionary for the key NSURLSession
. If the key exists, save the value associated with it to use later when you try to resume the download. If the key does not exist, the download can’t be resumed.
ダウンロードが失敗する時、そのセッションはあなたのurl
委任先メソッドを呼び出します。error
がnil
でないならば、それのuser
辞書をキーNSURLSession
を求めて覗き込みます。そのキーが存在するならば、それと結びつけられた値を保存して、後々あなたがダウンロードを再開しようと試みる時に使います。キーが存在しないならば、ダウンロードは再開されることができません。
Listing 2 shows an implementation of url
that retrieves and saves the resume
object, if any, from the error.
コード出力 2 は、url
のある実装を示します、それはresume
オブジェクトを、もしあれば、エラーから回収して保存します。
Use the Stored Resume Data Object to Resume Downloading 格納された再開データオブジェクトを使ってダウンロードを再開する
When it’s appropriate to resume the download, create a new URLSession
by using the download
or download
method of URLSession
, passing in the resume
object you stored earlier. Then call resume()
on the task to resume the download.
ダウンロードを再開するのに適切である場合、新しいURLSession
をURLSession
のdownload
またはdownload
メソッドを、あなたが前に格納したresume
オブジェクトを渡して、使うことによって作成してください。それからresume()
をそのタスク上で呼び出して、ダウンロードを再開してください。
If the download resumes successfully, the task calls your delegate’s url
method. You can use the offset and byte count parameters to inform the user that the download has resumed and has preserved its earlier progress.
ダウンロードがうまく再開するならば、タスクはあなたの委任先のもつurl
メソッドを呼び出します。あなたは、オフセットおよびバイト数パラメータを使って、ユーザにダウンロードが再開されているそしてそれの前の進捗が保全されていることを告知できます。