didSelectRowAtIndexPath方法与使用Swift 2的{Parse}中的加载更多函数冲突

时间:2015-10-17 08:27:08

标签: ios swift uitableview didselectrowatindexpath pfquerytableviewcontrolle

我正在使用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)
}

1 个答案:

答案 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()