gpt4 book ai didi

ios - 通过 API 调用填充 tableView 中的单元格

转载 作者:搜寻专家 更新时间:2023-11-01 07:13:22 24 4
gpt4 key购买 nike

我被迫使用异步调用(我猜是快速关闭)来使用 SDK (APIWrapper) 获取我需要的数据。我发现在我能够获得我需要的数据之前, View 正在初始化。

所以我要问大家的第一个问题是,如何让我的单元格在 View 加载之前将我需要的数据引入 TableView ?那么,为什么我要在此时使用异步调用

import APIWrapper
import UIKit

class MyViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

let provider = APIWrapper
var categories = [String]()


//define number of cells
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
categories = []
self.getCells()
print("count " , self.categories.count)
return(self.categories.count)
}

//get number of cells
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "categories")
cell.textLabel?.text = categories[indexPath.row]
return(cell)
}

private func getCells(){
provider?.getCategoriesWithCallback { (response, error) -> () in
if error == nil {
print("response ", response)
self.updateTableViewWithCategories(categories: response as! [APIWrapperCategory])
}
else {
print("FUCKK")
}
}
}

private func updateTableViewWithCategories(categories: [APIWrapperCategory]){
for category in categories{
print("category obj " , category)
print("category name " , category.name)
}
}
}

我控制台的输出看起来像

count  0
count 0
count 0
count 0
response Optional([<APIWrapperCategory: 0x6000002a0300>])
category obj <ZDKHelpCenterCategory: 0x6000002a0300>
category name General
response Optional([<ZDKHelpCenterCategory: 0x6180002a30c0>])
category obj <ZDKHelpCenterCategory: 0x6180002a30c0>
category name General
response Optional([<ZDKHelpCenterCategory: 0x6180002a30c0>])
category obj <ZDKHelpCenterCategory: 0x6180002a30c0>
category name General
response Optional([<ZDKHelpCenterCategory: 0x6180002a3300>])
category obj <ZDKHelpCenterCategory: 0x6180002a3300>
category name General

最佳答案

您正在从 TableView 的数据源方法获取 TableView 的数据。

要从 API 调用中获取数据,请在 View Controller 的 viewDidLoad() 方法中调用 self.getCells() 方法,如下所示:

override func viewDidLoad() {
//your code here
//get cells data
self.getCells()
}

并将您的 api 响应数据添加到 TableView 数据源中:

  private func updateTableViewWithCategories(categories: [APIWrapperCategory]){
self. categories = []
for category in categories{
print("category obj " , category)
print("category name " , category.name)
self. categories.append(category.name)
}
//reload table view here
DispatchQueue.main.async {
self.yourTableView.reloadData()
}
}

并将委托(delegate)方法更改为:

  //define number of cells
public func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("count " , self.categories.count)
return(self.categories.count)
}

关于ios - 通过 API 调用填充 tableView 中的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43624302/

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