我试图创建一个从在线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
}
}
答案 0 :(得分:2)
Alamofire请求以异步方式执行。您需要明确告诉您的表视图在网络请求完成时重新加载,否则您将从结果中填充数组,但是在远程数据加载时已经加载了表视图。
所以,在
之后for locationLoop in json {
let usersJSON = locationLoop.1["user"].stringValue
self.locationName.append(usersJSON)
}
添加:
tableView.reloadData()