HOME > NSURLSession
NSURLSessionでバックグラウンドで通信処理
NSURLConnectionの進化版のような立ち位置に私は感じております。アプリがバックグラウンドになっても通信処理を続けてくれる優れものです。
以前まではどうやら音声や位置情報だけに限られていましたが、このクラスによって大きなデータをユーザに気持ちよくDLしてもらうことも可能にです。
プロトコルはHTTPだけですが、
ZIPファイルなんかを大量にデータを詰め込んでDLする等利用価値はかなり高いのではと思います。NSURLConnectionは汎用的でFTP等の通信プロトコルにも対応していますので、
臨機応変にご利用いただければ感謝です。
NSURLSessionのクラス階層
NSObject
↑
NSURLSession
参考:NSURLSession のまとめ
参考:Foundation Framework Reference NSURLSession Class Reference
参考:iOS 7で一新された通信周り〜NSURLSessionってなに?〜
参考:iOSハンズオントレーニング通信(NSURLConnection/NSURLSession)編
やってみた
Swifサラリーマンのサーバにある25KB程度のZIPをダウンロードするサンプルです。
import UIKit
class ViewController: UIViewController, NSURLSessionDownloadDelegate {
override func viewDidLoad() {
super.viewDidLoad()
let newsUrlString = "http://swift-salaryman.com/files/download/ssziparchive_sample.zip"
//ネットワーク上からZIPをダウンロードする
var sessionConfiguration:NSURLSessionConfiguration = NSURLSessionConfiguration.backgroundSessionConfigurationWithIdentifier("com.company")
var session:NSURLSession! = NSURLSession(configuration: sessionConfiguration, delegate: self, delegateQueue: nil)
var downloadTask:NSURLSessionDownloadTask = session.downloadTaskWithURL(NSURL(string:newsUrlString)!);
downloadTask.resume()
}
//ZIPファイルをネットワーク上からDL完了後に呼ばれる
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL){
println(location);
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
このZIPファイルを解凍する方法は過去記事のSSZipArchiveをご一読いただければ感謝です
カスタマイズ
少しだけNSURLSessionConfigurationの設定に関して説明します。
HTTPMaximumConnectionsPerHost
ホストに対しての同時接続の上限です。バックグラウンドで実行できる非同期のNSURLSessionですので重複しますので、 ホストに対しての上限をこのプロパティで調整することが可能です
allowsCellularAccess
こちらはセルラーアクセスが可能かどうかです。Wifi接続ではなく3Gとか4Gとかですね。通信をWifiだけに限定して ユーザフレンドリーにしたりも可能です。僕的にも4Gの時なんかに大きなファイルを勝手にDLしているのは止めてほしいです。。。
timeoutIntervalForRequest
リクエスト毎のタイムアウトと判断する閾値の設定です。デフォルトは60秒。
まとめ
非同期セッション関連の作業は面倒な処理が多いと思っていましたが、ソースを整理してみると以外に短くほっとしました。 よろしければご利用いただければ感謝です:)
↓こんな記事もありますよ!
![]() | SwiftData+SqliteのDBファイル保存+Libraryフォルダから読込さて、私の目標は事前に作成したSqliteのDBファイルをSwiftDataで読み込むことですので、その一連の作業を以下説明してまいります。 |
![]() | UINavigationControllerTabBarとUITableViewControllerを利用して一つのUIViewControllerだけをクリックすると右にスライドするUINavigationControlerを 利用したサンプルを記載します。というのも、AppDelegate内でUINavigationをself.windowのrootviewcontrollerにセットする 方法は多々あったのですが、AppDelegate内を利用しないでNavigationを実装する方法がなくハマっていましたのでを以下記載します |
![]() | UIStepperさて今回は基本のコンポーネントの一つStepper(メモリを少しずつ+とーで上下させるコントロール)を説明します。 単純なコントロールですのが、初期設定で、+と-が表示される優れものです。ただ、単調な為に記事にするのが面白くないので、 何度も申し訳ありませんが「ヒゲ」にフォーカスして、ヒゲを剃るStepper(ヒゲの量を調整する)を作成して説明してみます。 |
Tweet
![]() |
|||
|