[swift]不能显示列表解析 JSON 入表

发布时间: 2017/3/5 15:55:06
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我是新来 swift ,不知道为什么 UITableView 不显示的动态数据 JSON 数组。 我想要从 ITunes 顶级应用程序列表,通过使用 swiftyJSON ,然后创建动态表解析数据。 我的问题是当我运行这段代码所有我能与下面的代码是具有相同的值,如下面的图片 5 行

我如何可以使动态和我误认在哪里? 在此先感谢。

更新后的代码︰

import UIKit



struct Apps {
    var name : String!
}

class createTable: UITableViewController {

     var tableData = [Apps]()

    //Mark Properties
    @IBOutlet var appTableView : UITableView!

    override func viewDidLoad() {
        super.viewDidLoad()


        //Get the #1 app name from iTunes and SwiftyJSON
        DataManager.getTopAppsDataFromItunesWithSuccess { (iTunesData) -> Void in
            let json = JSON(data: iTunesData)


            if let appArray = json["feed"]["entry"].array {
                for appDict in appArray {
                    let appName : String! = appDict["im:name"]["label"].string
                     let ap = Apps(name: appName)
                    self.tableData.append(ap)

                }
            }
        }

        self.tableView.reloadData()
    }



    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }



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


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


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

                //Table view cells are reused and should be dequeued using a cell identifier.
                let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)

                    let rowData = self.tableData[indexPath.row]
                    cell.textLabel!.text = rowData.name


            return cell
        }


}

输出︰

enter image description here

解决方法 1:

不要求数据里面你 cellForRowAtIndexPath 。请求的数据,例如在 viewDidLoad触发器 reload 的表。

创建一个自定义的类,持有所需的数据,创建的这些自定义类的数组,每个单元格使用该自定义类的一个元素。

什么

var appName : String!
if let appArray = json["feed"]["entry"].array {
    for appDict in appArray {
         appName = appDict["im:name"]["label"].string
    }
}
cell.textLabel!.text = appName

应该怎么做?您运行该代码的每个单元格。你总是分配 appName 多次。 appName 终将会达被发现的最后一个名称。因此所有标签将都获得相同的文本设置。

总结的解决方案。

  • 创建一个类 App ,包含一个属性 name (后来更多)
  • 从在 AppStore 请求数据你viewDidLoad
  • 解析检索到的数据,创建实例的 App ,每个获取其名称的组,在数组中存储这些实例var apps = [App]()
  • 触发器的表重新加载
  • 在你 cellForRowAtIndexPath 检索 App 对应于单元格索引
  • return apps.count里面你numberOfRowsInSection
官方微信
官方QQ群
31647020