ios – 刷新时数组索引超出范围

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

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

重新加载数据几次后,我得到一个致命的错误:数组索引超出范围,下面一行代码突出显示在我的cellForRowAtIndexPath中.

有趣的是,当我打印出我的内容
使用println(驱动器)的索引路径,所有的帖子都在那里.但后来有些帖子出现两次,然后应用程序会崩溃.

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

我在几个函数中附加了timelinedata计数.第二个图像是我在cellForRowIndexPath中打印计数的时候

解决方法

尝试:

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

在实际填充列表之前,可能会出现数据不一致的情况.这样,如果发生某种错误,您将获得数据,因此您也可以从这一点开始安全.

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...