我目前正在开发一个应用程序,我想在TableView中显示从JSON网页获取的数据...我的代码将JSON数据保存在数组中已经可以正常打印它们每次都在控制台中,但数据并没有加载到tableview中,我尝试了几乎所有的东西:更改单元格标识符,使用自定义单元格等等......有关如何解决此问题的任何想法?
import UIKit
class TableViewController: UIViewController {
@IBOutlet weak var tableView: UITableView!
var names: [String] = []
var rating: [String] = []
override func viewDidLoad() {
super.viewDidLoad()
let url=URL(string:"https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=51.0460761,3.7286716&radius=300&type=bar&key=AIzaSyCpHkY1s-qZjTOyTvDjMgD6hr5VTtEOgpU")
do {
let allContactsData = try Data(contentsOf: url!)
let allContacts = try JSONSerialization.jsonObject(with: allContactsData, options: JSONSerialization.ReadingOptions.allowFragments) as! [String : AnyObject]
if let arrJSON = allContacts["results"] {
for index in 0...arrJSON.count-1 {
let aObject = arrJSON[index] as! [String : AnyObject]
names.append(aObject["name"] as! String)
rating.append(aObject["id"] as! String)
}
}
print(names)
print(rating)
self.tableView.reloadData()
}
catch {
}
}
func tableView(_ tableView: UITableView!, numberOfRowsInSection section: Int) -> Int {
return names.count;
}
func tableView(_ tableView: UITableView!, didSelectRowAtIndexPath indexPath: IndexPath!) {
print("You selected name : "+names[indexPath.row])
}
func tableView(_ tableView: UITableView, cellForRowAtIndexPath indexPath: IndexPath) -> UITableViewCell{
var cell = tableView.dequeueReusableCell(withIdentifier: "cell")
if !(cell != nil) {
cell = UITableViewCell(style: .subtitle, reuseIdentifier: "cell")
}
cell?.textLabel?.text=self.names[indexPath.row]
cell?.detailTextLabel?.text = self.rating[indexPath.row]
return cell!
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
override func viewWillAppear(_ animated: Bool) {
// Hide the navigation bar on the this view controller
self.navigationController?.setNavigationBarHidden(true, animated: true)
}
override func viewWillDisappear(_ animated: Bool) {
// Show the navigation bar on other view controllers
self.navigationController?.setNavigationBarHidden(false, animated: true)
}
}
答案 0 :(得分:0)
通过此链接查看我的回答... Why is data not displayed when viewDidLoad finished in swift?
原因很可能是您没有将dataSource
的{{1}}和delegate
设置为自我。请尝试在tableView
中添加此代码。希望您的问题能够得到解决
viewDidLoad()
答案 1 :(得分:0)
您的班级TableViewController
无法确认UITableViewDelegate
和UITableViewDataSource
,您也没有设置tableView.dataSource = self
和tableView.delegate = self
使用以下代码段
class TableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
tableView.delegate = self
}
}