2016-04-20 93 views
1

我想使用MVC模式,我用的Alamofire API获得响应的JSON数据。我无法发送数据来更新我的模型中的tableview。帮助我使用json值更新我的表格。如何将模型的(json)值发送到视图控制器?

这是我的API:

class func showData(completionHandler:(model)->()){ 
     var arrRes = [[String:AnyObject]]() 
     Alamofire.request(.GET, "http://api.androidhive.info/contacts/").responseJSON { (req, res, json) -> Void in 
     let swiftyJsonVar = JSON(json.value!) 
     if let resData = swiftyJsonVar["contacts"].arrayObject { 
      arrRes = resData as! [[String:AnyObject]] 
      print(arrRes) 
      if arrRes.count > 0 { 
      let name = swiftyJsonVar["contacts"]["name"].stringValue 
      let email = swiftyJsonVar["contacts"]["email"].stringValue 

       let detail = model(name: name, email: email) 
       completionHandler(detail) 

      } 
      } 
     } 
} 

这是我的控制器:

@IBOutlet var appsTableView: UITableView! 
    var tableData:[model] = [model]() 


    override func viewDidLoad() { 
    super.viewDidLoad() 

    self.appsTableView.reloadData() 
    self.appsTableView.backgroundColor = UIColor.orangeColor() 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = appsTableView.dequeueReusableCellWithIdentifier("MyTestCell") as! newTabelcell 
    let dict = self.tableData[indexPath.row] 
    cell.name.text = dict.name 
    cell.mailid.text = dict.email 
    return cell 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return tableData.count 
} 

func configureTableView() { 
    appsTableView.rowHeight = UITableViewAutomaticDimension 
    appsTableView.estimatedRowHeight = 100.0 
    self.appsTableView.reloadData() 
} 

这是我的模型:

class model: NSObject { 
     var name:String! 
     var email:String! 
    init(name:String , email:String){ 
     super.init() 
     self.name = name 
     self.email = email 
     } 
    } 

只有tableview中和两个标签是我有插入单元格中;一个标签用于显示json名称,另一个用于显示json电子邮件。

回答

0

我想你会得到一些问题,因为我有这个工作之前,我叫从您的通话区别,这就是我如何使用Alamofire:

Alamofire.request(.GET, "http://api.androidhive.info/contacts/").responseJSON { (responseData) -> Void in 
      switch responseData.result { 
      case .Success(let value): 
       let swiftyJsonVar = JSON(value) 
       // You can adjust here, because I didn't use Contact Model in my Project. 
       if let resData = swiftyJsonVar["contacts"].arrayObject { 
        self.arrRes = resData as! [[String:AnyObject]] 
       } 
       if self.arrRes.count > 0 { 
        self.tblJSON.reloadData() 
       } 
      case .Failure(let error): 
       print(error.description) 
      } 
     } 

您可以在https://github.com/khuong291/Swift_Example_Series下载我的项目(项目11 )。我已经完成加载JSON到tableView。

0

这是具有itunessearch方法我编辑的API类。

func itunesSearch(completionHandler:(songData)->()) { 

    Alamofire.request(.GET, "http://itunes.apple.com/search?", parameters: ["term" : "tamil new songs", "media" : "music"]) 
     .responseJSON { (request, response, json) in 

       let json = JSON(json.value!) 
       if let jsonData = json["results"].arrayObject { 
       self.array = jsonData as! [[String : AnyObject]] 
       for num in 1...5{ 
       let arraydata = json["results"][num] 
        //print([arraydata]) 
       let artistid = arraydata["artistId"].stringValue 
       let trackname = arraydata["trackName"].stringValue 

       let song = songData(country: artistid , currency: trackname) // The parameter name country and currency of this method is just defined in the model class.Don't get confuse by those names which is just reference. 
       completionHandler(song) } 
      } 
     } 
} 

这正好为我工作..

相关问题