一个Viewcontroller中的两个Tableview“索引超出范围”错误

时间:2019-06-11 09:44:17

标签: swift uitableview return tableview

我在一个ViewController中有两个Tableview。但是,如果运行此代码,我将在第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 个答案:

答案 0 :(得分:1)

numberOfRowsInSection中,更新if-condition

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

当前tableView == tableView始终是true,返回值是comments个计数。

答案 1 :(得分:0)

我认为问题出在您使用cellForRowAt

的方式上

尝试使用tableView.accessibilityIdentifier = "myIdentifier"为每个表视图提供一个标识符 然后cellForRowAt将如下所示:

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

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

答案 2 :(得分:0)

您可以尝试

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()
        }