Ошибка «Индекс вне диапазона» с двумя табличными представлениями в одном Viewcontroller - PullRequest
1 голос
/ 11 июня 2019

У меня есть два Tableviews в одном ViewController.Но если я выполню этот код, я получу эту ошибку в строке let post = posts[indexPath.row]:

"Индекс вне диапазона"

Я думаю, что-то сposts.count, но я не могу понять это.Когда я запускал этот код без второго Tableview Tableview_moremaps, все работало просто отлично.

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
            if comments.count == 0  {
                self.tableView.setEmptyMessage("No comments yet!")
            } else {
                self.tableView.restore()
            }

            if posts.count == 0 {
                self.Tableview_moremaps.setEmptyMessage("No other maps yet!")
            }else{
                self.Tableview_moremaps.restore()
            }

            if tableView == tableView {
                return comments.count
            }else{
                return posts.count
            }

        }

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

            if tableView == self.tableView {
                let cell = tableView.dequeueReusableCell(withIdentifier: "Comment", for: indexPath) as? CommentTableViewCell
                let comment = comments[indexPath.row]
                cell?.comment = comment
                cell?.delegate = self

                return cell!
            } else if tableView == Tableview_moremaps {
                let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as? MoremapsTableViewCell
                cell?.Map_image.image = nil
                let post = posts[indexPath.row]
                cell?.post = post
                cell?.delegate = self
                return cell!
            }

            return UITableViewCell()
        }

Ответы [ 3 ]

1 голос
/ 11 июня 2019

В numberOfRowsInSection, обновить if-condition

   if tableView === self.tableView {
        return comments.count
    } else {
        return posts.count
    }

В настоящее время tableView == tableView всегда true, а возвращаемое значение comments count.

0 голосов
/ 11 июня 2019

вы можете попробовать это

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
           if tableView == self.tableView {
        return comments.count

    }
    else{
        return posts.count
    }
}

//Your this code is perfect.(no issue here)
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

            if tableView == self.tableView {
                let cell = tableView.dequeueReusableCell(withIdentifier: "Comment", for: indexPath) as? CommentTableViewCell
                let comment = comments[indexPath.row]
                cell?.comment = comment
                cell?.delegate = self

                return cell!
            } else if tableView == Tableview_moremaps {
                let cell = tableView.dequeueReusableCell(withIdentifier: "Cell") as? MoremapsTableViewCell
                cell?.Map_image.image = nil
                let post = posts[indexPath.row]
                cell?.post = post
                cell?.delegate = self
                return cell!
            }

            return UITableViewCell()
        }
0 голосов
/ 11 июня 2019

Я думаю, что проблема в том, как вы используете cellForRowAt

Попробуйте дать каждому виду таблицы идентификатор с tableView.accessibilityIdentifier = "myIdentifier", и тогда cellForRowAt будет выглядеть следующим образом:

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

            if tableView.accessibilityIdentifier == "myIdentifier" {
                let cell = .....
                ...
...
...
...
...
...