ios - 从 API 调用将数据加载到 UITableView 的问题
问题描述
我是 ios 开发新手,遇到从 API 调用加载数据到 UITableView 的问题。该应用程序将用作订购系统。为了将数据放入 tableView 的每个单元格,我在 viewController 上有一个按钮,它发送带有项目 id 的 post 请求,并且 id 与服务器上内存中的项目匹配。我有一个视图控制器,它有一个当前订购项目的 tableView,这是我的问题所在。
我有另外两个视图控制器 (BeerListTableViewController
和CocktailListTableViewController
),其中的 tableViews 加载了您可以订购的项目。这些 tableViews 正在正确加载它们各自的项目。当按下任一 tableView 中的单元格时,我会转到另一个 viewController (BeerDetailViewController
或CocktailDetailViewController
),其中显示项目并显示“下订单”按钮。放置订单按钮将项目发送到服务器,然后将其添加到订单数组中,然后 popViewController 以返回到 tableView。我已经验证了这些项目被正确添加。在两者中BeerListTableViewController
,CocktailListTableViewController
我都添加了一个 barButtonItem “Orders”,DrinkOrderTableView
这就是我的问题所在。在此表中仅查看来自的订单BeerDetailViewController
正在显示。我已经包含了来自 xcode 项目的代码和我的节点 index.js 文件。任何帮助深表感谢!
class DrinkOrdersTableViewController: UITableViewController {
var orders: [Order] = []
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.title = "Current Orders"
fetchAllCurrentOrders { orders in
self.orders = orders!
print(self.orders)
self.tableView.reloadData()
}
}
private func fetchAllCurrentOrders(completion: @escaping([Order]?) -> Void) {
Alamofire.request("http://127.0.0.1:4000/orders", method: .get)
.validate()
.responseJSON { response in
guard response.result.isSuccess else { return completion(nil) }
guard let rawInventory = response.result.value as? [[String: Any]?] else { return completion(nil) }
let currentOrders = rawInventory.compactMap { ordersDict -> Order? in
guard let orderId = ordersDict!["id"] as? String,
let orderStatus = ordersDict!["status"] as? String,
var pizza = ordersDict!["pizza"] as? [String: Any] else { return nil }
pizza["image"] = UIImage(named: pizza["image"] as! String)
return Order(
id: orderId,
pizza: Pizza(data: pizza),
status: OrderStatus(rawValue: orderStatus)!
)
}
completion(currentOrders)
}
}
@IBAction func closeButtonPressed(_ sender: Any) {
dismiss(animated: true, completion: nil)
}
override func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("Debugging ROWS", orders.count)
return orders.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "order", for: indexPath)
let order = orders[indexPath.row]
cell.textLabel?.text = order.pizza.name
cell.imageView?.image = order.pizza.image
cell.detailTextLabel?.text = "$\(order.pizza.amount) - \(order.status.rawValue)"
return cell
}
override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 100.0
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "orderSegue", sender: orders[indexPath.row] as Order)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "orderSegue" {
guard let vc = segue.destination as? OrderViewController else { return }
vc.order = sender as? Order
}
}
}
链接到服务器代码
链接到问题的屏幕截图
解决方案
推荐阅读
- javascript - javascript如何获取父类构造函数参数
- c# - 无法在 VS Web 解决方案中添加 Resx 文件
- php - 从 PHP 脚本生成 HTML 页面时如何隐藏 shebang
- java - 并发哈希映射
与原子参考 - html - 使用 Google AMP“on”操作参考当前事件的文本内容
- python - python文件在没有库的情况下进行ast和back
- javascript - 正则表达式仅修剪逗号,但不在文本之间和引用时修剪 - Java 脚本
- scala - 如何使此定期指标收集代码更具功能性(不可变状态)?
- excel - VBA Excel - 在 Outlook 邮件正文中粘贴图表(不是图像)
- java - 无法写入具有权限的 SD 卡