gpt4 book ai didi

ios - 使用 JSON 数据填充 UITableView

转载 作者:行者123 更新时间:2023-11-28 15:10:15 26 4
gpt4 key购买 nike

我正在为 iPhone 构建一个非常基本的 reddit 客户端,只是为了练习针对 iOS 的开发。我已经得到它来解析我选择的 subreddit 的 JSON,但是我无法从解析的 JSON 中获取标题并将它们显示在我的 UITableView 中。我现在遇到的问题是,在加载 UITableView 之前,我无法让我的“postList”数组填充 JSON 数据。因此,当填充表格 View 单元格时,postList 数组的元素中没有任何内容可供填充。知道如何解决这个问题吗?

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var tableView: UITableView!

let URL = "https://www.reddit.com/r/swift/.json"

var postList : [PostList] = Array(repeating: PostList(), count: 26)
//var postList : [PostList] = []
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
tableView.dataSource = self
tableView.delegate = self
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.

}
//Setting up tableView
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "aroundMeCell", for: indexPath)

getPosts(url: URL, row: indexPath.row, cell: cell)
let title = postList[indexPath.row].title
cell.textLabel?.text = title
return cell
}


//Receiving posts using Alamofire
func getPosts(url: String, row: Int, cell: UITableViewCell) {
Alamofire.request(url, method: .get)
.responseJSON { response in
if response.result.isSuccess {
let postJSON : JSON = JSON(response.result.value!)
//print(postJSON)
self.createPostListArray(json: postJSON, row: row, cell: cell)

} else {
print("Error: \(String(describing: response.result.error)) aaaaaa")
}
}
}

func createPostListArray(json: JSON, row: Int, cell: UITableViewCell) {

let titlePath : [JSONSubscriptType] = ["data", "children", row, "data", "title"]
let postPath : [JSONSubscriptType] = ["data", "children", row, "data", "selftext"]

//Making sure I can unwrap both
if(json[titlePath].string != nil && json[postPath].string != nil){
let inTitle = json[titlePath].string!
let inPost = json[postPath].string!
postList[row].title = inTitle
postList[row].post = inPost
}
else{
print("error")
}
}

最佳答案

您的代码存在多个问题。

1- var postList : [PostList] = Array(repeating: PostList(), count: 26)。您可以创建空数组 var postList = [PostList]() 并在响应中追加删除元素。

2- 在 cellForRowAt 上调用 api 根本不是一个好主意。 原因:无论何时调用此方法,您都会调用一个 api。考虑这样一个场景,即您正在滚动您的 tableview 以获取您将调用此 api 的每个出队。

class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

@IBOutlet weak var tableView: UITableView!

let URL = "https://www.reddit.com/r/swift/.json"

var postList = [PostList]()
override func viewDidLoad() {
super.viewDidLoad()
getPosts(url: URL)
tableView.dataSource = self
tableView.delegate = self
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.

}
//Setting up tableView
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return postList.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "aroundMeCell", for: indexPath)
let title = postList[indexPath.row].title
cell.textLabel?.text = title
return cell
}


//Receiving posts using Alamofire
func getPosts(url: String) {
Alamofire.request(url, method: .get)
.responseJSON { [weak self] response in
if response.result.isSuccess {
let postJSON : JSON = JSON(response.result.value!)
//print(postJSON)
self?.createPostListArray(json: postJSON)
self?.tableView.reloadData()

} else {
print("Error: \(String(describing: response.result.error)) aaaaaa")
}
}
}

func createPostListArray(json: JSON) {
//parse your json here, or read about objectMapper a pod. This will help you in parsing and if you are using swift 4, read encode json.
}

关于ios - 使用 JSON 数据填充 UITableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47782908/

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