使用 JSON 数据填充表
Posted
技术标签:
【中文标题】使用 JSON 数据填充表【英文标题】:Populate table using JSON data 【发布时间】:2018-03-04 20:54:20 【问题描述】:我正在尝试使用本地页面中的 JSON 填充表格。 到目前为止,它从 JSON 中获取所有数据,但仍然没有将任何文本放入单元格中。
我检查了我的单元格的标识符,它与 withIdentifier 匹配或使用了变量 nom 或 fec 并且也不起作用。
任何帮助都会很有用(使用 Alamofire 除外)。
import UIKit
class ListarViewController: UIViewController, UITableViewDelegate, UITableViewDataSource
var nom: String?
var fec: String?
var datas = [Actividad]()
struct Actividad : Codable
let actividad: String?
let fecha: String?
@IBOutlet weak var pruebalbl: UILabel!
var correo: String?
override func viewDidLoad()
super.viewDidLoad()
pruebalbl.text = correo
//print(correo)
let request = NSMutableURLRequest(url: NSURL(string: "http://localhost:8080/swiftdb/listarAct.php")! as URL)
request.httpMethod = "POST"
let postString = "correo=\(pruebalbl.text!)"
request.httpBody = postString.data(using: String.Encoding.utf8)
let task = URLSession.shared.dataTask(with: request as URLRequest)
data, response, error in
guard let data = data, error == nil elsereturn
do
let articlesData = try JSONDecoder().decode([Actividad].self, from: data)
DispatchQueue.main.async
self.datas = articlesData
let aarti = self.datas
print(self.datas)
for item in aarti
self.nom = item.actividad
self.fec = item.fecha
print("Nombres \(self.nom)")
print("Fecha \(self.fec)")
catch let error as NSError
print(error)
print("response = \(response)")
let responseString = NSString(data: data, encoding: String.Encoding.utf8.rawValue)
print("responseString = \(responseString)")
task.resume()
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return datas.count
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
cell?.textLabel?.text = datas[indexPath.row].actividad
return cell!
我什至将自定义文本添加到 cell?.textLabel?.text 并且不起作用。
【问题讨论】:
为什么标记为 PHP? @max 更新...完成了吗? 收到数据后需要在table view上调用reloadData()
。为什么是NSString
,为什么是NSMutableURLRequest
,为什么是Swift 3 中的NSURL
?
还是不行
考虑接收数据后在完成块中,而不是在resume
行之后。
【参考方案1】:
感谢@vadian
我得到了答案:
我只需要在我的 DispatchQueue.main.async 之间添加 reloadData()
【讨论】:
【参考方案2】:也许您必须在调用异步函数之前验证 url 请求的状态。
let response = response as? HTTPURLResponse
if(response?.statusCode == 200)
//Call your DispatchQueue
我希望这对你有用。
您好!
【讨论】:
以上是关于使用 JSON 数据填充表的主要内容,如果未能解决你的问题,请参考以下文章