ラベル NSURLSession の投稿を表示しています。 すべての投稿を表示
ラベル NSURLSession の投稿を表示しています。 すべての投稿を表示

2016年7月7日木曜日

[Swift] NSURLSessionでカスタムヘッダーを追加する

どうも俺です。

 NSURLSessionに独自のユーザーエージェントなど、ヘッダー内をカスタマイズする方法。
Swift v2です。

let url = NSURL(string:"http://hogehoge.com")
let config = NSURLSessionConfiguration.defaultSessionConfiguration()

// ここからヘッダー追加
config.HTTPAdditionalHeaders = ["User-Agent": "MyOriginalUserAgent"]
config.hTTPAdditionalHeaders = ["Custom-Header": "This is MyCustomHeader"]

let session = NSURLSession(configuration: config)
let request = NSURLRequest(URL: url)
let task = session.dataTaskWithRequest(request)
task.resume()

これで追加できます。
サーバー側でログを確認すると、
HTTP_USER_AGENT : MyOriginalUserAgent
HTTP_CUSTOM_HEADER : This is MyCustomHeader

のように、
・PREFIXに「HTTP_」が付く。
・全て大文字に変換される。
・「-(ハイフン)」は「_(アンダースコア)」に変換される。
という変換処理が内部的に走るようです。


以上でぇぇぇす。

2016年6月30日木曜日

UITableView#reloadData()がうまく動かん

どうも、俺です。
最近はSwiftをいろいろ触っています。

さてタイトルのとおり、
例えば、NSURLSessionを使って
サーバーから取得したデータをUITableViewの各セルに表示させようとして、

  func hoge()
  {
    let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration())
    let request = NSURLRequest(URL: NSURL("https://xxxx.example.com"))
    let task = session.dataTaskWithRequest(request, completionHandler: self.getData)
    task.resume()
  }

  func getData(data:NSData?, res:NSURLResponse?,error:NSError?)
  {
    // ここで取得したデータをゴニョニョして...


    // ↓reload()してんのに表示変わらん!
    self.tableView.reloadData()
  } 

このような現象になっている場合。
安心してください。大丈夫です。
上記の例の場合、tableViewのreloadData()がメインスレッドから呼ばれていないことが原因なので、
reloadData()の呼び出しは


  dispatch_async(dispatch_get_main_queue(), {
    self.tableView.reloadData()
  })

こうしてやればOKです。

以上でェェェえす。