刷新时数组索引超出范围
Array index out of range on refresh
我有一个 Posts
class,我正在使用 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
中打印计数时
尝试:
findItemData.findObjectsInBackgroundWithBlock{
(objects:[AnyObject]? , error:NSError?) -> Void in
if error == nil
{
timelineData.removeAll(keepCapacity: false)
self.timelineData = objects as! [PFObject]
self.newsFeedTableView.reloadData()
}
}
在实际填充列表之前,可能会出现数据不一致的情况。这样,如果发生某种错误,您将获得数据,因此从那时起您也是安全的。
我有一个 Posts
class,我正在使用 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
中打印计数时
尝试:
findItemData.findObjectsInBackgroundWithBlock{
(objects:[AnyObject]? , error:NSError?) -> Void in
if error == nil
{
timelineData.removeAll(keepCapacity: false)
self.timelineData = objects as! [PFObject]
self.newsFeedTableView.reloadData()
}
}
在实际填充列表之前,可能会出现数据不一致的情况。这样,如果发生某种错误,您将获得数据,因此从那时起您也是安全的。