3

我正在开发一个简单的 iPhone 应用程序,该应用程序正在从 UITableView 内的 Web 服务(RSS 提要)加载数据。第一次加载应用程序时,我使用初始值为 1 的计数器来加载提要的第一页:

- (void)viewDidLoad
{
    [super viewDidLoad];
    counter = 1;    
    [self fetchEntriesNew:counter];
} 

当用户向下滚动到 tableview 的底部时,我正在使用以下方法通过递增计数器来获取 rss 提要的下一页来在 tableview 中加载更多数据:

- (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];
    }
}

每次用户向下滚动到 tableview 的底部时,计数器都会增加,因此调用 rss 提要的下一页。至此,一切正常。

但是,如果用户在到达底部后向上滚动多次,计数器也会多次增加,因此到达 rss 提要的不同页面并将其添加到 tableview 的底部。

更准确地说,如果用户已经到达底部并向上滚动 3 次,而不是加载第二页,它将加载第四页(滚动 3 次加上开始时已经添加了 1)

如果没有加载之前的页面条目,我如何限制不添加另一个页面条目?

请不要建议在 tableview 或任何第三方库(如 NMPaginator 和 PartialTable 等)底部处理更多行的替代策略。提前致谢!

更新:

我通过一次又一次地运行它来密切观察该应用程序。似乎如果用户在 tableview 完成加载已经请求的页面数据(包括图像)之前滚动到底部(增加计数器),它将忽略加载当前正在加载的页面并开始加载下一个基于递增的计数器。

4

2 回答 2

2

您能否检查以下代码并告诉我:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    float endScrolling = scrollView.contentOffset.y + scrollView.frame.size.height;
    if (endScrolling >= scrollView.contentSize.height)
    {   
        static int counterCheck = 0;
        ++counter;

        if (counter - counterCheck == 1)
        {
            [self fetchEntries:counter];
            ++counterCheck;
        }
        else
            --counter;
    }
}
于 2013-04-12T10:33:55.093 回答
1

您可以通过记录需要加载的页面以及最后加载的页面来解决问题。通常,您只需要确保忽略所有最终要求您加载比上一个加载页面高 1 多的页面的请求。例如:

if (pageThatNeedsToBeLoaded != lastPageLoaded + 1) {
    // ignore the request
}

此外,您可以创建一个标志来保持控制器的状态和获取状态,例如在您发送请求时isFetchingData将设置为YES,然后NO在加载数据后将其设置为。如果标志设置为YES,您将不会调用任何其他请求以获取更多数据。也就是说,假设您的数据是以增量方式加载的,并且在任何情况下您一次都不会加载超过一页。

于 2013-04-12T10:11:03.440 回答