簡體   English   中英

使用NSFetchedResultsController的無限UITableView滾動

[英]Infinite UITableView Scroll with NSFetchedResultsController

我正在嘗試使用方法來實現無限滾動的UITableView

該解決方案的核心邏輯是:

  1. 將tableview的內容增加3倍,以便我們將3份內容的副本垂直放置。
  2. 每當到達滾動的頂端時,將滾動偏移移回第二個副本的開頭
  3. 當到達滾動的最底端時,我們將滾動偏移移回到第二個副本的開頭減去表視圖的高度,以便最終顯示與現在相同的內容。

這意味着單個單元格的插入或刪除實際上會導致三個插入或刪除。 由於我表的數據源是由NSFetchedResultsController填充的,因此會導致斷言失敗。

更新(12)之后在現有節中包含的行數必須等於更新(15)之前在該節中包含的行數,加上或減去從該節插入或刪除的行數(已插入0) ,刪除1個),然后加上或減去移入或移出該部分的行數(移入0,移出0)。

在這種情況下,有什么方法可以阻止程序崩潰? 我真的很感謝任何幫助/指針。 謝謝。

在iOS中,這可能會有些棘手,尤其是在您剛入門時。 關鍵是在通知更改之前,更新支持UITableView的數據源。

例如,如果您有一個支持表視圖的NSArray ,則在對表reloadSection:調用reloadSection:之前,您需要刪除或添加項目。

盡管它是最不優化的解決方案,但是您的測試可以隨意調用reloadData ,它會忽略表視圖已緩存的內容,並根據支持表視圖的內容強制其重新計算。

您可以使用NSFetchedResultsControllerDelegate方法controller:didChangeObject:atIndexPath:forChangeType:newIndexPath: 插入\\刪除3個對象。

為簡單起見,您可以在表視圖中返回3的節數(這將處理獲取3個對象的副本)。 然后在NSFetchedResultsControllerDelegate更新UITableView所有部分中的對象(插入,刪除或移動)。 您應該使用NSFetchedResultsControllerDelegate行號,並對不同部分分別應用所有更改3次。 請記住要使其與UITableView數據源方法tableView:numberOfRowsInSection:保持一致。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM