#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
в этом случае.