UITableView 内の Web サービス (RSS フィード) からデータをロードしている単純な iPhone アプリに取り組んでいます。初めてアプリをロードするとき、フィードの最初のページをロードするために、初期値が 1 のカウンターを使用しています。
- (void)viewDidLoad
{
[super viewDidLoad];
counter = 1;
[self fetchEntriesNew:counter];
}
ユーザーがテーブルビューの一番下までスクロールすると、カウンターをインクリメントしてRSSフィードの次のページをフェッチすることにより、テーブルビューにさらにデータをロードするために次の方法を使用しています:
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
float endScrolling = scrollView.contentOffset.y + scrollView.frame.size.height;
if (endScrolling >= scrollView.contentSize.height)
{
NSLog(@"Scroll End Called");
counter++;
[self fetchEntries:counter];
}
}
ユーザーがテーブルビューの一番下までスクロールするたびにカウンターが増加するため、RSS フィードの次のページが呼び出されます。この時点まで、すべてが正常に機能しています。
ただし、ユーザーが一番下に到達した後に複数回上にスクロールすると、カウンターも複数回インクリメントされるため、RSS フィードの別のページに到達してテーブルビューの一番下に追加されます。
より正確には、ユーザーが一番下に到達して上に 3 回スクロールした場合、2 ページ目をロードする代わりに、4 ページ目をロードします (3 回スクロールした後、最初に追加された 1 ページ)。
前のページがロードされていない場合、別のページエントリを追加しないように制限するにはどうすればよいですか?
tableview の下部や、NMPaginator や PartialTable などのサードパーティ製ライブラリでより多くの行を処理するための代替戦略を提案しないでください。よろしくお願いします。
アップデート:
アプリを何度も実行して注意深く観察しました。tableview が既に要求されているページ データ (画像を含む) の読み込みを完了する前に、ユーザーが一番下までスクロールすると (カウンターがインクリメントされます)、現在読み込まれているデータの読み込みは無視され、次のデータの読み込みが開始されます。インクリメントされたカウンターに基づいています。