0

我正在解析使用 PHP - LIMIT 和 GET 获取 MySQL 数据库中前 25 个项目的 XML。当我单击附加到表格视图底部的“加载更多”单元格时,它成功获取了接下来的 25 个项目,但只加载了前 40 个并保留了最后 10 个。每次我单击“加载更多” " 单元格将 25 添加到我的范围(即 0-25,25-50),但似乎我的范围上限为 65,显示上限为 40。

这是我的加载更多功能不起作用:

-(void) getNewRange{
    int currentRange = [allItems count];
    int newRange = currentRange + 25;

    if(newRange > [xmlParser total]){
        NSLog(@"evaluating as greater than the total, which is 837");
        newRange = [xmlParser total];
    }

    NSString *range = [[NSString alloc] initWithFormat:@"?range=%d&range2=%d",currentRange,newRange];
    NSString *newUrl =[[NSString alloc] initWithFormat:@"http://localhost/fetchAllTitles.php%@",range];

    XMLParser *tempParser = [[XMLParser alloc] loadXMLByURL:newUrl];
    [allItems addObjectsFromArray:[tempParser people]];
    NSMutableArray *newCells = [[NSMutableArray alloc] initWithCapacity:25];

    for(int i=currentRange;i<newRange;i++){
        NSLog(@"%d",i);
         NSIndexPath *indexpath=[NSIndexPath indexPathForRow:i inSection:0];
        [newCells addObject:indexpath];
    }

    NSLog(@"%@",newUrl);

    [self.tableView insertRowsAtIndexPaths:newCells withRowAnimation:UITableViewRowAnimationAutomatic];
}

我越来越近了,但我收到了这个新错误:

*** Assertion failure in -[_UITableViewUpdateSupport _computeRowUpdates], /SourceCache/UIKit_Sim/UIKit-1912.3/UITableViewSupport.m:386
4

3 回答 3

4

阅读如何重用表格视图的单元格

您的数据不需要为单元“所有”。

于 2012-08-24T20:14:28.253 回答
3

UITableView 不是一个包含您的数据的类,您不应该尝试直接对它显示的单元格进行微观管理。正如另一张海报所说,请阅读如何使用它。你应该做的是:

-(void)loadNewData
{
    NSIndexPath *index;
    XMLParser *tempParser = [[XMLParser alloc] loadXMLByURL:newUrl];
    NSArray *people=[tempParser people];
    for(id *person in people)
    {
        [self.dataArray addObject:person];
        indexPath=[NSIndexPath indexPathForRow:[self.dataArray indexForObject:person] inSection:0];
        [tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:indexPath withRowAnimation:UITableViewRowAnimationAutomatic];
    }
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{ 
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [AnArray count];//use whatever array stores your data
}


//If you've subclassed the cell, adjust appropriately.
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"cell"];
    if (!cell) {
        cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
    }
    //Customize the cell
    return cell;
}

如果您允许,表格视图将处理显示单元格所涉及的所有逻辑。这样,您在任何给定时间只有有限数量的单元格占用内存,并且您不必处理它 - 表格视图自动处理重用单元格,并知道需要多少作为缓冲区之前 /后。

于 2012-08-24T20:49:11.867 回答
2

你不应该在你的方法中设置 numberOfRowsInSection 。应该从 tableView 的数据源方法返回行数- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section。只要回到[allItems count]那里。

于 2012-08-24T20:20:18.637 回答