UITableView在保持已经被提取的同时插入更多行

Jes*_*ica 8 iphone uitableview uiscrollview ios

下面是我用来获取和解析Feed的不同页面的函数.

- (void)getFeed:(NSInteger) pageNumber
{
    collectedData = [[NSMutableData alloc] init];
    NSString *urlStr =[NSString stringWithFormat:@"http://sitename.com/feed/?paged=%d", pageNumber];
    NSURL *url = [NSURL URLWithString:urlStr];
    NSURLRequest *req = [NSURLRequest requestWithURL:url];
    conn = [[NSURLConnection alloc] initWithRequest:req delegate:self startImmediately:YES];
}
Run Code Online (Sandbox Code Playgroud)

当用户向下滚动到tableview的底部时,我使用以下函数来访问feed的第二页,依此类推,递增计数器:

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
    float endScrolling = scrollView.contentOffset.y + scrollView.frame.size.height;
    if (endScrolling >= scrollView.contentSize.height)
    {
        counter ++;
        [self getFeed:counter];
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是,当它不是在已经获取的项目下面加载它时,它会重新加载tableview以显示新的页面项目,而旧的页面项目将消失.我想在现有页面下面加载新的页面项目以进行无限滚动.我怎样才能做到这一点?

Jes*_*ica 2

回答自己的问题感觉很糟糕,但在另一个论坛的帮助下,我找到了答案。

表视图控制器与可变数组不同步,因此我创建了另一个并附加两个数组。

Step1:我创建了一个属性

@property (nonatomic, readonly) NSMutableArray *moreItems;
Run Code Online (Sandbox Code Playgroud)

Step2: 在调用 fetchEntries 之前初始化 ViewDidLoad 中的数组

moreItems = [[NSMutableArray alloc] init];
Run Code Online (Sandbox Code Playgroud)

第3步:在connectionDidFinishLoading中,我将新数组“moreItems”附加到先前的数组“items”

[moreItems addObjectsFromArray:[channel items]];
Run Code Online (Sandbox Code Playgroud)

Step4:将 numberOfRowsInSection 中的数据源更改为

return [[channel items] count];
Run Code Online (Sandbox Code Playgroud)

到新数组

return [moreItems count];
Run Code Online (Sandbox Code Playgroud)

然后在 cellForRowAtIndexPath 中使用新数组

RSSItem *item = [moreItems objectAtIndex:[indexPath row]];
Run Code Online (Sandbox Code Playgroud)