我有一个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() } }
在实际填充列表之前,可能会出现数据不一致的情况.这样,如果发生某种错误,您将获得数据,因此您也可以从这一点开始安全.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。