刷新时数组索引超出范围

Posted

技术标签:

【中文标题】刷新时数组索引超出范围【英文标题】:Array index out of range on refresh 【发布时间】:2015-06-21 23:11:18 【问题描述】:

我有一个Posts 类,我正在使用Parse 作为我的后端在UITableViewController 中查询。

在我的viewDidAppear 中,我调用了我的loadData() 函数。然后我有一个var refresher = UIRefreshControl() 负责我的refresh() 功能。

重新加载数据几次后,我得到一个 fatal error: Array index out of range 并突出显示了我的 cellForRowAtIndexPath 中的以下代码行。

有趣的是当我打印出我的 使用println(drive) 的索引路径,所有帖子都在那里。但是在某些情况下,某些帖子出现了两次,然后应用程序就会崩溃。

timelineData.removeAll(keepCapacity: false)

我认为这样做应该可以清除所有内容,因此我不确定为什么会发生这种情况。

这是我的刷新功能代码。

func refresh()


    println("refresh table from pull")

    timelineData.removeAll(keepCapacity: false)

    var findItemData:PFQuery = PFQuery(className:"Posts")

    findItemData.addDescendingOrder("createdAt")

    findItemData.findObjectsInBackgroundWithBlock
        (objects:[AnyObject]? , error:NSError?) -> Void in
        if error == nil
        
            self.timelineData = objects as! [PFObject]
            self.newsFeedTableView.reloadData()

        

    
    self.refresher.endRefreshing()



我尝试使用 Parse 的 query.cachePolicy 但这并不重要,因为崩溃一直在发生。 https://parse.com/docs/ios/guide#queries-querying-the-local-datastore

我还以为是因为我有Parse.enableLocalDatastore(),但仍然没有运气。

如前所述,我确实在我的viewDidAppear 中调用了我的另一个函数loadData,不确定这是否是问题所在,但我不知道如何在有更新时检查数据。仍然不确定这是否是问题的根源。

编辑 1

我在几个函数中附加了我的时间线数据计数。第二张图片是当我在我的cellForRowIndexPath 中打印计数时

【问题讨论】:

您应该在代码中的多个位置多次打印数组的边界(计数)。 所以 println(timelinedata.count) 是什么意思? @LinusG。 是的。然后在您的帖子中发布输出。 @LinusG。我添加了输出的屏幕截图,实际上有9个测试帖子 您是否尝试将timelineData.removeAll(keepCapacity: false) 放入块中? 【参考方案1】:

尝试:

findItemData.findObjectsInBackgroundWithBlock
    (objects:[AnyObject]? , error:NSError?) -> Void in
    if error == nil
    
        timelineData.removeAll(keepCapacity: false)
        self.timelineData = objects as! [PFObject]
        self.newsFeedTableView.reloadData()
    
 

在您实际填充列表之前,可能会出现不一致的数据。这样,如果发生某种错误,您将获得您的数据,因此从那时起您也很安全。

【讨论】:

对于那些遇到这个问题的人来说,这个解决方案自发布以来就对我有用 这对我也有用。经过数周试图弄清楚这一点。谢谢!

以上是关于刷新时数组索引超出范围的主要内容,如果未能解决你的问题,请参考以下文章

使用刷新时集合视图索引超出范围

致命错误:在特定视图上刷新数据时索引超出范围

使用致命错误刷新tableview时应用程序崩溃:索引超出范围Swift3

从firebase删除时数组索引超出范围

数组索引超出范围

致命错误:追加数组时数组索引超出范围