动态表视图不显示来自 API 调用的 JSON 数据的文本

Dynamic UITable View not displaying text with JSON data from API call

所以我连接到这个 API 并使用 ALAMOFIRE 和 SWIFTYJSON 从中检索一些数据,然后将其显示到 UItable 视图:

这是示例 JSON Return:

{
  "status" : "success",
  "countries" : [
    {
      "name" : "Åland Islands",
      "flag" : "https:\/\/1fx.cash\/\/flags\/europe.png",
      "currency_code" : "EUR",
      "country_iso3" : "ALA",
      "country_code" : "AX"
    },
    {
      "name" : "American Samoa",
      "flag" : "https:\/\/1fx.cash\/\/flags\/usa.png",
      "currency_code" : "USD",
      "country_iso3" : "ASM",
      "country_code" : "AS"
    },
    {
      "name" : "Virgin Islands, U.S.",
      "flag" : "https:\/\/1fx.cash\/\/flags\/usa.png",
      "currency_code" : "USD",
      "country_iso3" : "VIR",
      "country_code" : "VI"
    }
  ]
}

这是我的全部 viewcontroller:

import UIKit
import Alamofire
import SwiftyJSON
class addCountry: UIViewController, UITableViewDataSource, UITableViewDelegate {

    var datas: [JSON] = []
    @IBOutlet var tableView: UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()

        Alamofire.request(.GET, "https://sample.com/countries").responseJSON { (request, response, json, error) in
            if json != nil {
                var jsonObj = JSON(json!)
                if let data = jsonObj["countries"].arrayValue as [JSON]?{
                    self.datas = data
                    self.tableView.reloadData()
                }

            }
        }

    }


    func numberOfSectionsInTableView(tableView: UITableView) -> Int {
        return 1
    }

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

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

         let cell:UITableViewCell=UITableViewCell(style: UITableViewCellStyle.Subtitle, reuseIdentifier: "cell")


        let data = datas[indexPath.row]

            if let caption = data["countries"]["name"].string{
                cell.textLabel?.text = caption
            }


        return cell
    }

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
        tableView.deselectRowAtIndexPath(indexPath, animated: true)

        let row = datas[indexPath.row]
        println(row)
    }


}

当我运行它时,它不显示任何东西。

我使用了 println(row) 所以当我 select 一个单元格时,它会在控制台上打印一个数据以显示那里确实有数据,而且确实有。

我只是无法在 UItable 视图中显示它们。

谁能帮帮我?提前致谢! :)

我认为你需要添加这个:

self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")

override func viewDidLoad() {
          ...
}

问题与您的数据结构以及您在 cellForRowAtIndexPath 中过滤它的方式有关。

首先,您使用 let data = datas[indexPath.row] 筛选出一个国家/地区,这会为您提供如下数据集:

{
    "name" : "Åland Islands",
    "flag" : "https:\/\/1fx.cash\/\/flags\/europe.png",
    "currency_code" : "EUR",
    "country_iso3" : "ALA",
    "country_code" : "AX"
}

之后您尝试访问其中的 countries 属性 和 name 属性。唯一的问题是,上面的代码片段中不存在 countries 属性。

相反,您需要像下面的代码一样直接访问 name 属性:

if let caption = data["name"].string{
    cell.textLabel?.text = caption
}