Я новичок в разработке ios и столкнулся с проблемой загрузки данных из вызова API в UITableView.Приложение будет служить в качестве системы заказа.Чтобы получить данные в каждую ячейку tableView, у меня есть кнопка на viewController, которая отправляет запрос на публикацию с идентификатором элемента, и этот идентификатор сопоставляется с элементами в памяти на сервере.У меня есть контроллер представления, у которого есть tableView текущих упорядоченных элементов, где моя проблема.
У меня есть два других контроллера представления (BeerListTableViewController
и CocktailListTableViewController
) с табличными представлениями в них, загруженными элементами, которые вы можете заказать.Эти tableViews загружаются правильно со своими соответствующими элементами.При нажатии на ячейку в любом из таблиц ViewView я выполняю переход к другому 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
}
}
}
ссылка на код сервера
Ссылка на экранную копию выпуска