0

我正在使用 Parse 创建我的应用程序。在我使用 didSelectRowAtIndexPath 方法之前,我的应用程序运行良好,一旦我使用该方法将数据传递给另一个视图控制器以显示详细信息,当我点击“加载更多”行时,我得到错误:

由于未捕获的异常“NSRangeException”而终止应用程序,原因:“*** -[__NSArrayM objectAtIndex:]:索引 13 超出范围 [0 .. 12]”

我用谷歌搜索了它,有人说:'问题可能出在你的 tableView:didSelectRowAtIndexPath: 方法中。当你的任何行被点击时,这会被调用——包括 loadMore 单元格。您可能想检查被点击的单元格是否是 Load More 单元格,在这种情况下返回(并让对 super 的调用处理加载更多数据)。

这对我来说是相当合理的,但是这个人没有给出解决方案,这是 2 年前的答案,我现在正在使用 Swift。

所以这是我的代码以及任何可以帮助我的人吗?谢谢。

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {

    var targetObject = objectAtIndexPath(indexPath)!

    gameIdSelected = targetObject["GameId"] as! String

    performSegueWithIdentifier("segue", sender: self)
}
4

1 回答 1

0

您的答案仍然包含解决方案

当您的任何行被点击时调用 - 包括 loadMore 单元格

如果您的数据数组仅包含 13 个项目(从 0 到 12),如果您包含一个 loadmore 单元格,它将不起作用,因为您将有 14 个单元格而不是 13 个。因此,如果您点击 loadmore 单元格,它将尝试访问数组的第 14 项,但您只有 13 项,所以这就是您出现此索引错误的原因。

如果您的单元格是 loadmore 单元格,请不要调用 objectAtIndex。像这样的东西:

if indexPath.row == 13 {
   //Do loadmore stuff
} else {
   var targetObject = objectAtIndexPath(indexPath)!

   gameIdSelected = targetObject["GameId"] as! String

   performSegueWithIdentifier("segue", sender: self)
}

当然不要硬编码 loadmore 值,但我不知道你的数据源名称。通常我们正在做这样的事情:

if indexPath.row == yourDataSourceArray.count()
于 2015-10-17T10:43:24.323 回答