gpt4 book ai didi

json - 将 Json 解析为 UITableview

转载 作者:行者123 更新时间:2023-11-28 06:03:16 25 4
gpt4 key购买 nike

我有一个 UITableView,我需要使用从网上获取的一些 JSON 中的数据来填充单元格。我已经成功获取并解析了数据。问题在于没有使用正确的数据创建单元格,因为它们是在 JSON 完成加载之前创建的,因此无法与数据一起显示。我知道您可以轻松使用 tableView.reloadData() 而我遇到了另一个问题。我需要在调用任何 tableView 方法之前下载数据。

这样做的原因是因为我想根据 JSON 中的单元格数量返回单元格数量。所以像 jsoncells.count

这样的东西

到目前为止,这是我的代码:我有一些版本可以正常工作,但自从我稍微修改了代码后,它们就不见了。

import UIKit

class TimelineViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var backgroundImageView: UIImageView!
var timelineCellDataArray = [[String:String]]()
override func viewDidLoad() {
super.viewDidLoad()
setupBackground(backgroundImage: #imageLiteral(resourceName: "Placeholder 1.jpeg"))
}

func setupBackground(backgroundImage: UIImage) {
backgroundImageView.image = backgroundImage

// Background Image Blur Effect:
let backgroundImageBlurEffect = UIBlurEffect(style: .light)
let backgroundImageBlurEffectView = UIVisualEffectView(effect: backgroundImageBlurEffect)
backgroundImageBlurEffectView.frame = backgroundImageView.frame
backgroundImageView.addSubview(backgroundImageBlurEffectView)
}

// Change View Controller To Profle View Controller
func setViewToProfileViewController() {
print("H")
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileViewController
self.navigationController?.pushViewController(vc, animated: true)
}



func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 4
}

var isLoad = true
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "TimelineCell", for: indexPath) as! TimelineCell

// Json Parsing For Cell Populating
let urlString = "https://www.jasonbase.com/things/QRkQ.json"
let url = URL(string: urlString)
URLSession.shared.dataTask(with: url!) { (data, response, error) in
if error != nil {

} else {
do {
let parsedData = try JSONSerialization.jsonObject(with: data!) as! [String:[[String:String]]]
self.timelineCellDataArray = parsedData["timelineCell"]!
DispatchQueue.main.async {
print("we")
switch self.timelineCellDataArray[indexPath.row]["cellType"] {
case "1"?:
cell = cell.createPostCell(cellToUse: cell)
case "2"?:
cell = cell.createPartyCell(cellToUse: cell)
case"3"?:
cell = cell.createFriendRequestCell(cellToUse: cell)
default:
break
}
tableView.reloadData()
self.isLoad = false
}
} catch let error as NSError {
print(error)
}
}
}.resume()
print("WD")
return cell
}

}

这是我的 JSON https://www.jasonbase.com/things/QRkQ.json

最佳答案

viewDidLoad 中获取 JSON。然后您可以创建一个全局变量(看起来您正在使用名为 timelineCellDataArray 的变量)来存储您每次从数据库中获取新数据时追加的数据。

从数据库中获取所有数据后,调用 tableView.reloadData()。这样,在您的 numberOfRowsInSection 函数中,您可以只返回 timelineCellDataArray.count。在您的 cellForRowAt 函数中,您只需获取 timelineCellDataArray[index.row] 中的对象并使用该数据填充您的单元格。

关于json - 将 Json 解析为 UITableview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48957998/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com