我正在尝试将数据插入到我创建的行中,我将在我的日志中获取所有信息,但它只显示我所有行中的最后一个信息。有人可以建议一种避免这种错误的方法吗?
请给我一些建议,谢谢!
答案 0 :(得分:2)
实际上,你永远不会重新填充细胞。您正在创建初始可见单元格,只是重复使用相同的内容..请看下面的内容:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath
{
static NSString *CellIdentifier = @"TestCell";
TestCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
// HERE YOU ONLY WANT TO INSTANTIATE THE CELL
NSArray *topObjects = [[NSBundle mainBundle] loadNibNamed:@"TestCell" owner:nil options:nil];
for (id currentObject in topObjects)
{
if([currentObject isKindOfClass:[TestCell class]])
{
cell = (TestCell *) currentObject;
break;
}
}
}
// HERE YOU WOULD ACTUALLY POPULATE THE CELL WITH DATA
NSArray *array = [server get_texts:10 offset:0 sort_by:0 search_for:@""];
NSMutableString *s = [[NSMutableString alloc] init];
for (testMetaData *m in array){
[s appendFormat:@"%@ %@ \n", m.title,m.note];
cell.title.text = m.title;
NSLog(@" title %@ ", m.title);
}
return cell;
}
有关UITableView
的一些信息:
因此,正确设置的tableView仅分配和使用有限数量的UITableViewCell
s。在分配之后,比如5个单元格(这个数字由“你能在任何给定的时间看到多少个单元?”确定),它将需要一个已经创建的单元格滚出可见区域,然后将它返回给你在您正在使用的方法中,您可以重新填充它。因此,cell
变量当时不会是nil
,并且您的服务器代码永远不会被调用。
答案 1 :(得分:0)
我认为这与你的for循环有关。
NSMutableString *s = [[NSMutableString alloc] init];
for (testMetaData *m in array){
[s appendFormat:@"%@ %@ \n", m.title,m.note];
cell.title.text = m.title;
NSLog(@" title %@ ", m.title);
}
您的cell.title.text = m.title
将在for循环结束时获得最后m.title
个信息。
答案 2 :(得分:0)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath
*)indexPath
{
//Load Cell for reuse
static NSString *CellIdentifier = @"TestCell";
TestCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell =[ [[NSBundle mainBundle] loadNibNamed:@"TestCell" owner:nil options:nil] lastObject];
}
//appending text and config cell
NSArray *array = [server get_texts:10 offset:0 sort_by:0 search_for:@""];
NSString *t = [array objectAtIndex:indexPath.row];
//Config cell - Not sure what you want. Maybe 10 different rows
cell.title.text = t;
return cell;
}