Завершение работы приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «Receiver () не имеет перехода с идентификатором« pizzaSegue » - PullRequest
0 голосов
/ 10 апреля 2019

Я новичок в быстром программировании и сталкиваюсь с ошибками при выполнении перехода из ячейки табличного представления, когда она нажата к контроллеру представления, предоставляющему подробности об этой ячейке.Я получаю сообщение об ошибке: 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 в конструктор интерфейса вместе с выводом на консоль.Пожалуйста помоги!screenshot

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...