Я новичок в быстром программировании и сталкиваюсь с ошибками при выполнении перехода из ячейки табличного представления, когда она нажата к контроллеру представления, предоставляющему подробности об этой ячейке.Я получаю сообщение об ошибке: Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Receiver (<DrinkupClient.DrinkListTableViewController: 0x7fec5d431510>) has no segue with identifier 'pizzaSegue''
Я уже попробовал следующее: 1) Попробовал переименовать раскадровку и не забудьте установить основной раскадровку в настройках проекта и в файле info.plist (ключ).«Основное имя файла раскадровки»).В настоящее время у меня есть раскадровка с именем: "MainDrinkBoard.storyboard"
2) Попытка выполнить чистку продукта (Product -> Clean) и пересобрать, но это выдает ту же ошибку
3) У меня естьпопытался удалить приложение из симулятора и запустить его снова
4) Я дважды проверил, и идентификатор сегмента в конструкторе интерфейсов называется "pizzaSegue", и он совпадает с моим кодом.
5) Это может показаться очевидным - но на 100 процентов уверен, что переход действительно существует в конструкторе интерфейсов.
struct Drink {
let id: String
let name: String
let description: String
let amount: Float
let image: UIImage
init(data: [String: Any]) {
self.id = data["id"] as! String
self.name = data["name"] as! String
//self.amount = data["amount"] as! Float
self.amount = ((data["amount"] as? NSNumber)?.floatValue)!
self.description = data["description"] as! String
self.image = data["image"] as! UIImage
}
}
class DrinkTableViewCell: UITableViewCell {
@IBOutlet weak var cellName: UILabel!
@IBOutlet weak var cellAmount: UILabel!
@IBOutlet weak var cellDescription: UILabel!
@IBOutlet weak var cellImage: UIImageView!
}
class DrinkListTableViewController: UITableViewController {
var drinks: [Drink] = []
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.title = "Drink Selection"
tableView.register(DrinkTableViewCell.self, forCellReuseIdentifier: "cell")
//tableView.estimatedRowHeight = 134
//tableView.rowHeight = UITableView.automaticDimension
fetchInventory { drinks in
guard drinks != nil else { return }
self.drinks = drinks!
//print("Data from API call: ", self.drinks)
//self.tableView.reloadData()
DispatchQueue.main.async { [weak self] in
self?.tableView.reloadData()
}
}
}
@IBAction func showOrdersButtonPressed(_ sender: UIBarButtonItem) {
performSegue(withIdentifier: "orders", sender: nil)
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
performSegue(withIdentifier: "pizzaSegue", sender: self.drinks[indexPath.row] as Drink)
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "pizzaSegue" {
guard let vc = segue.destination as? PizzaViewController else { return }
vc.pizza = sender as? Pizza
}
}
private func fetchInventory(completion: @escaping ([Drink]?) -> Void) {
Alamofire.request("http://127.0.0.1:4000/inventory", 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 inventory = rawInventory.compactMap { pizzaDict -> Drink? in
var data = pizzaDict!
data["image"] = UIImage(named: pizzaDict!["image"] as! String)
//print("Printing each item: ", Drink(data: data))
//printing all inventory successful
return Drink(data: data)
}
completion(inventory)
}
}
// MARK: - Table view data source
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
print("ROWS: ", drinks.count)
return drinks.count
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
//let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DrinkTableViewCell
//let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! DrinkTableViewCell
let cell = UITableViewCell(style: UITableViewCell.CellStyle.subtitle, reuseIdentifier: "cell")
cell.imageView?.image = drinks[indexPath.row].image
cell.textLabel?.text = drinks[indexPath.row].name
cell.detailTextLabel?.text = drinks[indexPath.row].description
return cell
}
}
При запуске приложения я получаю весь путь к контроллеру tableView, где у меня есть 4 ячейки с метками и изображение.Когда я нажимаю на одну из ячеек, предполагается, что происходит переход к контроллеру представления, но он выдает ошибку, описанную выше.Я включил снимок экрана segue в конструктор интерфейса вместе с выводом на консоль.Пожалуйста помоги!