Как отправлять комментарии из UIViewController в другой UIViewController и сохранять их в массиве?

#ios #swift

#iOS #swift

Вопрос:

Когда я нажимаю на ячейку из моего TableView, появляется всплывающий ViewController, и оттуда я хочу отправлять комментарии главному UIViewController с использованием делегатов. В главном ViewController я хочу сохранить эти комментарии в массиве строк и после этого показать эти комментарии в каждой ячейке из моего TableView. Проблема в том, что происходит сбой с ошибкой Fatal error: Index out of range , потому что у меня нет никаких комментариев в начале.

Если я зайду в функцию numberOfRowsInSection и верну commentsArray.count , то я больше не смогу нажимать ни на одну ячейку, чтобы показать мое всплывающее окно. Есть ли способ удалить эту ошибку, не затрагивая мой код из numberOfRowsInSection ?

Вот мой код:

 class MainVC: UIViewController {

    @IBOutlet weak var questionsTableView: UITableView!

    var commentReceived = [String]()

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        switch section {
        case 0: return 1 // This need to be 1
        case 1: return 2 // This need to be 2
        default: return 1
        }
    }

    func numberOfSections(in tableView: UITableView) -> Int {

        return 2
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! MainVCCell
        cell.delegate = self
        cell.configCell()

        cell.commentLabel.text = commentReceived[indexPath.row] // ERROR HERE -> Fatal error: Index out of range

        return cell
    }

    // implemented protocol
    func receivedComment(comment: String?) {
        commentReceived.append(comment ?? "")
        questionsTableView.reloadData()
    }

    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if segue.identifier == "goToPopUp" {
            let popUpVC = segue.destination as! PopUpVC
            popUpVC.delegate = self
        }
    }

}
  

Комментарии:

1. Ваше количество строк должно основываться на количестве полученных комментариев в массиве.

Ответ №1:

numberOfSections Здесь выполняется жесткое кодирование, если ваше data array значение пустое, вы должны вернуть 0.

 func numberOfSections(in tableView: UITableView) -> Int {
    if commentReceived.isEmpty {
        return 0
    }
    return 2
}
  

Или замените эту строку
cell.commentLabel.text = commentReceived[indexPath.row]

с помощью

 if !commentReceived.isEmpty {
  cell.commentLabel.text = commentReceived[indexPath.row]
}
  

если вы хотите сначала показать empty cell . Не return 0 в этом случае.