2017年1月19日木曜日

webから取得したデータをtableViewに表示






//
//  ViewController.swift
//
//

import UIKit

class ViewController: UIViewController ,UITableViewDataSource{
   
    // リスト
    var dataList : [(id:String, name:String)] = []

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
       
        // データを取得する
        getUriData()
        tableView.dataSource = self     // 追加
    }
   
    @IBOutlet weak var tableView: UITableView!
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    // データソースメソッドを追加
    func tableView(tableView:UITableView, numberOfRowsInSection sectioin: Int)-> Int{
        return dataList.count
    }
   
    // Cellに値を設定する
    func tableView(tableView:UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell{
        let cell = tableView.dequeueReusableCellWithIdentifier("listCell", forIndexPath: indexPath)
       
        cell.textLabel!.text = rosenList[indexPath.row].name
       
        return cell
    }
   
    // データを取得する
    func getUriData(){
        let urlString = "uri"
        let url = NSURL(string: urlString)
       
        //download by NSSession
        let task = NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler:{data, response, error in
            //convert json data to dictionary
            var dict:NSDictionary
            do {
                // 余計な"()"を排除する為に、NSData -> NSString(カッコ排除) -> NSData とする
                var out = NSString(data:data!, encoding:NSUTF8StringEncoding)
                print(out)
                out = out?.stringByReplacingOccurrencesOfString("(", withString: "")
                out = out?.stringByReplacingOccurrencesOfString(")", withString: "")
                print(out)
                let data2 = out!.dataUsingEncoding(NSUTF8StringEncoding)

                dict = try NSJSONSerialization.JSONObjectWithData(data2!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
               
                // JSONでdictionaryとして取得
                let rosenDatas = dict["list"] as! NSArray
                var titles:String = ""
                for entry in rosenDatas {
                    let id:String = entry["id"] as! String
                    titles += id + "/"
                    let name = entry["name"] as! String
                    titles += name + " "
                   
                    let data = (id:id, name:name)
                    self.dataList.append(data)
                }
               
                // UIスレッドに出力する場合
                /*
                dispatch_async(dispatch_get_main_queue()){
                    // self.jsonTextView.text = titles
                }
                */
                self.tableView.reloadData()     // UIを更新
            } catch {
                print("error")
                return
            }
            // print(dict)
        })
        task.resume()
    }

}

0 件のコメント:

コメントを投稿