我正在使用Parse来创建我的应用程序。我的应用程序运行正常,直到我使用didSelectRowAtIndexPath方法,只要我使用该方法将数据传递到另一个视图控制器以显示详细信息,并且当我点击“加载更多”时行,我得到错误:
由于未捕获的异常终止应用' NSRangeException',原因:' *** - [__ NSArrayM objectAtIndex:]:索引13超出界限[0 .. 12]'
我用Google搜索了一些,有些人说: '问题可能出在你的tableView:didSelectRowAtIndexPath:方法中。当您的任何行被轻敲时调用此方法 - 包括loadMore单元格。您可能想要检查正在被点击的单元格是否是“加载更多”单元格,在这种情况下返回(并调用超级句柄加载更多数据)。'
这对我来说相当合理,但这个家伙没有给出解决方案,这是2年前的答案,我现在正在使用Swift。
所以,这是我的代码和任何可以帮助我的人吗?感谢。
override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
var targetObject = objectAtIndexPath(indexPath)!
gameIdSelected = targetObject["GameId"] as! String
performSegueWithIdentifier("segue", sender: self)
}
答案 0 :(得分: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()