我正在解析使用PHP获取MySQL数据库中前25项的XML - LIMIT和GET。当我点击附加到我的tableview底部的“加载更多”单元格时,它成功获取了接下来的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
答案 0 :(得分:4)
了解如何重新使用表格视图的单元格。
您的数据不需要由单元格“拥有”。
答案 1 :(得分: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;
}
如果您允许,表视图将处理显示单元格所涉及的所有逻辑。这样,您在任何给定时间只有有限数量的单元占用内存,而您不必处理 - 表视图自动处理重用单元,并知道在/之前需要多少个作为缓冲区后。
答案 2 :(得分:2)
你不应该在你的方法中设置numberOfRowsInSection。应该从tableView的数据源方法- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
返回行数。只需返回[allItems count]
。