Objective-C:表格单元格只返回匹配数据的最后信息

时间:2013-10-18 23:16:46

标签: ios objective-c uitableview

我正在尝试将数据插入到我创建的行中,我将在我的日志中获取所有信息,但它只显示我所有行中的最后一个信息。有人可以建议一种避免这种错误的方法吗?

请给我一些建议,谢谢!

3 个答案:

答案 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;

}