Настройте количество строк для динамического содержимого TableView - PullRequest
0 голосов
/ 30 мая 2018

У меня есть страница с 3 TableCells (изображение внизу): первая ячейка, заполненная динамически загруженным контентом из Firebase для изображения профиля, имени пользователя и просматриваемых минут, который заполняется в моем массиве userModel.У меня проблема с установкой numberOfRowsInSection для таблицы, потому что первая ячейка является динамической.

Когда я пытаюсь подсчитать количество ячеек, я добавляю 2, потому что у меня есть две статические ячейки (ячейка мерча и ячейка выхода), которые, как я знаю, мне нужно отобразить.Но поскольку userModel.count начинается с 0, приложение вылетает из-за индексации строки динамического содержимого до заполнения массива userModel.count:

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return userModel.count + 2
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        if indexPath.row == 0 {
            let cell = tableView.dequeueReusableCell(withIdentifier: "leaderboardCell", for: indexPath) as! LeaderboardCell
            cell.profileImage.image = userModel[indexPath.row].photo
            cell.profileImage.layer.cornerRadius = cell.profileImage.frame.size.width/2
            cell.userName.text = userModel[indexPath.row].username
            cell.watchTime.text = userModel[indexPath.row].watchTime
            cell.profileLeaderboardContainer.layer.cornerRadius = 3.0
            return cell
        } else if indexPath.row == 1 {
            let cell = tableView.dequeueReusableCell(withIdentifier: "merchCell", for: indexPath) as! MerchCell
            return cell
        } else {
            let cell = tableView.dequeueReusableCell(withIdentifier: "logoutCell", for: indexPath) as! LogoutCell
            cell.logoutButton.layer.cornerRadius = 3.0
            return cell
        }

Приложение вылетает по адресу:

cell.profileImage.image = userModel[indexPath.row].photo

, что вполне логично, потому что нет никакого индекса местоположения 2, прежде чем какие-либо данные будут загружены в эту модель.Но мой вопрос заключается в том, как предотвратить такую ​​ошибку с помощью динамического массива в первой ячейке таблицы?Спасибо!

PS если у меня счетчик строк равен просто return userModel.count, то верхняя ячейка прекрасно загружается с динамическим содержимым, но две другие ячейки не загружаются вообще (это имеет смысл, поскольку счетчик внутри массива0), поэтому индексы 1 и 2 не отображаются

enter image description here

1 Ответ

0 голосов
/ 30 мая 2018

Вы можете сделать:

if userModel.count > indexPath.row {
    cell.profileImage.image = userModel[indexPath.row].photo
} else {
    cell.profileImage.image = nil //or whatever default value
}

Или, если userModel является необязательным:

if let count = userModel?.count, count > indexPath.row {
    cell.profileImage.image = userModel[indexPath.row].photo
} else {
    cell.profileImage.image = nil //or whatever default value
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...