2015-06-21 93 views
4

我有一個Posts類,我在UITableViewController使用Parse作爲我的後端查詢。數組索引超出範圍刷新

在我的viewDidAppear中,我打電話給我的loadData()函數。然後我有一個var refresher = UIRefreshControl()負責我的refresh()功能。

經過幾次重新加載數據,我得到一個fatal error: Array index out of range和下面的代碼行突出顯示在我的cellForRowAtIndexPath

enter image description here

什麼是有趣的是,當我打印出來使用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() 


} 

我試着用解析的query.cachePolicy但是這並不重要,因爲碰撞發生保存。 https://parse.com/docs/ios/guide#queries-querying-the-local-datastore

我也認爲這是因爲我有Parse.enableLocalDatastore()但仍然沒有運氣。

如前所述,我確實打電話給我的其他功能loadData在我的viewDidAppear中,不確定這是否可能是問題,但我不知道如何在有更新時檢查數據。仍然不確定這是否是問題的根源。

編輯1

我重視我的timelinedata計數幾個功能。第二圖像是當我打印計數我cellForRowIndexPath enter image description hereenter image description here

+0

您應該在代碼中的多個位置打印數組的邊界(計數)。 – LinusGeffarth

+0

so println(timelinedata.count)是什麼意思? @LinusG。 – kareem

+0

是的。然後在你的文章中發佈輸出。 – LinusGeffarth

回答

3

嘗試:

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

它可能發生,你有不一致的數據之前,你居然填充您的列表。這樣,如果發生某種錯誤,您將獲得您的數據,因此您從這一點開始也是安全的。

+0

修復了這個問題,這個解決方案自發布以來一直爲我工作 – kareem

+1

這也適用於我。經過幾個星期試圖弄清楚這一點。謝謝! –