JSON数组不会在UITable swift中显示

时间:2015-11-11 20:41:58

标签: arrays json swift swift2

我试图创建一个从在线JSON文件中填充其数据的表。我目前在线有JSON文件并被调用到类中并转换为数组,但是当我尝试将我的文本设置为此数组时,数据不会显示。

cell.textLabel?.text = "\(locationName[indexPath.row])"

但是,如果我在数组中设置数据,那么我需要数据来自JSON文件。

var array: double = ["1", "2", "3"]

这是我的带有数组代码的表类代码。任何帮助都会非常感谢

class SpotsDataClass: UITableViewController {

    var locationName = [String]()

    override func viewDidLoad() {
        super.viewDidLoad()

        Alamofire.request(.GET, "http://woamph.com/savedLocations.json")
            .response { request, response, data, error in

                if let data = data {

                    let json = JSON(data: data)

                    for locationLoop in json {
                        let usersJSON = locationLoop.1["user"].stringValue
                        self.locationName.append(usersJSON)
                        //let longitudeJSON = locationLoop.1["longitude"].doubleValue
                        //self.array2.append(longitudeJSON)
                    }

                    for i in 0 ..< self.locationName.count {
                        print("\(self.locationName[i])")
                        //print("\(self.array2[i])")
                        //self.locationNameLabel.text = "Location Name: \(self.array1[i])"
                    }

                    //self.titleLabel.text = "Spots Near You"
                    //self.locationNameLabel.text = "Location Name: \(spotData.locationName)"
                    //self.ratingLabel.text = "Rating: \(spotData.rating)"
                    //self.userLabel.text = "Posted By: \(spotData.user)"
                    //
                }
        }
    }

    //Mark: - UITableDataSource

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

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier("spotTable", forIndexPath: indexPath) as! UITableViewCell

        cell.textLabel?.text = "\(locationName[indexPath.row])"
        return cell
    }


}

1 个答案:

答案 0 :(得分:2)

Alamofire请求以异步方式执行。您需要明确告诉您的表视图在网络请求完成时重新加载,否则您将从结果中填充数组,但是在远程数据加载时已经加载了表视图。

所以,在

之后
for locationLoop in json {
  let usersJSON = locationLoop.1["user"].stringValue
  self.locationName.append(usersJSON)
}

添加: tableView.reloadData()