使用Alamofire从JSON填充tableview单元格(Swift 2)

我有以下代码。

import UIKit import Alamofire class CheHappyTableViewController: UITableViewController, NSURLConnectionDelegate { var happyHours = [HappyHour]() override func viewDidLoad() { super.viewDidLoad() //Load the cell elements loadHappyHourElements() } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func loadHappyHourElements(){ let testhappyhour:HappyHour = HappyHour(title: "TEST", image: "TESST", description: "TEST", postedDate: "TEST") self.happyHours.append(testhappyhour) let url:String = "https://gist.githubusercontent.com/arianitp/036133ebb5af317a595c/raw/f134ec241ec3126bedd6debe5de371e3e01d225b/happyhours.json" Alamofire.request(.GET, url, encoding:.JSON).responseJSON { response in switch response.result { case .Success(let JSON): let response = JSON as! NSArray for item in response { // loop through data items let obj = item as! NSDictionary let happyhour = HappyHour(title:obj["title"] as! String, image:obj["image"] as! String, description:obj["description"] as! String, postedDate:obj["date"] as! String) self.happyHours.append(happyhour) } case .Failure(let error): print("Request failed with error: \(error)") } } self.tableView.reloadData() } override func numberOfSectionsInTableView(tableView: UITableView) -> Int { // #warning Incomplete implementation, return the number of sections return 1 } override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return happyHours.count } //Displays the cells in the table override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { self.tableView.rowHeight = UIScreen.mainScreen().bounds.size.width let cellIdentifier = "CheHappyTableViewCellController" let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier, forIndexPath: indexPath) as! CheHappyTableViewCellController let happyHour = happyHours[indexPath.row] cell.lblTitle.text = happyHour.title //cell.cheHappyImage = happyHour.photo // Configure the cell... return cell } } 

即使我在Alamofire请求完成函数中包含self.tableView.reloadData() ,表格单元格也不会更新。 我还定义了一个带有标题的样本对象,并将所有的属性设置为“TEST”,这样做会加载,但是JSON文件不会填充表格。 我可以看到文件正在被正确下载并读取,但是我认为这些元素要么不被添加到属性variableshappyHours要么不被重新加载。

我从这里尝试了很多解决scheme,但没有成功。 我究竟做错了什么?

您的self.tableView.reloadData()行在callback之外,这意味着它在数据加载之前立即被调用。 尝试这个:

 func loadHappyHourElements(){ let testhappyhour:HappyHour = HappyHour(title: "TEST", image: "TESST", description: "TEST", postedDate: "TEST") self.happyHours.append(testhappyhour) let url:String = "https://gist.githubusercontent.com/arianitp/036133ebb5af317a595c/raw/f134ec241ec3126bedd6debe5de371e3e01d225b/happyhours.json" Alamofire.request(.GET, url, encoding:.JSON).responseJSON { response in switch response.result { case .Success(let JSON): let response = JSON as! NSArray for item in response { // loop through data items let obj = item as! NSDictionary let happyhour = HappyHour(title:obj["title"] as! String, image:obj["image"] as! String, description:obj["description"] as! String, postedDate:obj["date"] as! String) self.happyHours.append(happyhour) } self.tableView.reloadData() case .Failure(let error): print("Request failed with error: \(error)") } } }