【问题标题】:SIGABRT when calling scrollToRowAtIndexPath调用 scrollToRowAtIndexPath 时的 SIGABRT
【发布时间】:2014-08-23 00:18:17
【问题描述】:

在一个应用程序中,我正在提取一个 JSON 数组并使用它来填充 UITableView:

class TableViewController: UITableViewController, NSURLConnectionDelegate {
    var tableData: [AnyObject] = []
    // ...

    func connectionDidFinishLoading(connection: NSURLConnection!) {
        var dataAsString = NSString(data: data, encoding: NSUTF8StringEncoding)
        var err: NSError

        var json = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary

        // After parsing JSON...
        tableData += json as Array
        tableView.reloadData()

        tableView.scrollToRowAtIndexPath(NSIndexPath(index: tableData.count - 1), atScrollPosition: UITableViewScrollPosition.Top, animated: true)
    }

    // ...
}

最后一行调用scrollToRowAtIndexPath,产生一个信号SIGABRT。注释掉该行可以修复它。我对iOS开发相当陌生,所以任何帮助都将不胜感激。提前致谢。

【问题讨论】:

    标签: ios uitableview swift


    【解决方案1】:

    您应该使用以下代码:

    NSIndexPath(forRow: tableData.count - 1, inSection: 0) //O in section: if tableView has only one section
    

    代替:

    NSIndexPath(index: tableData.count - 1)
    

    传递给表视图的索引路径必须恰好包含两个指定节和行的索引。

    【讨论】:

      【解决方案2】:

      在 scrollToRowAtIndexPath 之前,您从未检查过数据中是否有任何数据。在这种情况下它可能为空 tableData.count -1 = -1

      【讨论】:

      • 感谢您的回复。我尝试将呼叫包装在条件 if tableData.count > 0 {...} 中,但仍然遇到同样的问题。
      • 检查tableview初始化..可能是nil
      • 看起来不错。我在它上面的 tableView 上调用 reloadData
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多