刷新时数组索引超出范围
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()
在您实际填充列表之前,可能会出现不一致的数据。这样,如果发生某种错误,您将获得您的数据,因此从那时起您也很安全。
【讨论】:
对于那些遇到这个问题的人来说,这个解决方案自发布以来就对我有用 这对我也有用。经过数周试图弄清楚这一点。谢谢!以上是关于刷新时数组索引超出范围的主要内容,如果未能解决你的问题,请参考以下文章