DataArray 已更改,但在 UITableView 上不显示新数据 [关闭]

Posted

技术标签:

【中文标题】DataArray 已更改,但在 UITableView 上不显示新数据 [关闭]【英文标题】:DataArray changed but on UITableView not show new data [closed] 【发布时间】:2013-07-04 11:27:22 【问题描述】:

我调试 DataArray 已更改,但在 UITableView 上仍然没有显示从 DataArray 获取的新数据。 这是我的代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

    NSString *CellIdentifier = [NSString stringWithFormat:@"%d,%d",indexPath.section,indexPath.row];

    UITableViewCell *cell = [_tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil)
    
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

        UILabel *FileNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 100, 30)];
        FileNameLabel.backgroundColor = [UIColor clearColor];
        FileNameLabel.font = [UIFont fontWithName:@"Helvetica" size:16];
        FileNameLabel.font = [UIFont boldSystemFontOfSize:16];
        FileNameLabel.textColor = [UIColor blackColor];
         NSLog(@"File Temp 4 array: %@", temp);
        FileNameLabel.text =[temp objectAtIndex:indexPath.row];
        [cell.contentView addSubview: FileNameLabel];
        [FileNameLabel release];

    
        return cell;

ViewWillAppear 中作用update()

-(void) update

      if([FileCompletedArray count] != [temp count])
      
            temp = [FileCompletedArray mutableCopy];
            NSLog(@"File Temp 1 array: %@", temp);
            [_tableView reloadData];
            NSLog(@"File Temp 2 array: %@", temp);
       

你有解决办法吗?

【问题讨论】:

每行中命名约定被多次破坏的代码很难阅读。 Data repeat in UITableView when scrolling的可能重复 【参考方案1】:

调用reloadData后,cellForRowAtIndexPath会被再次调用,但是由于cell已经创建,tableview会重用cell,所以这里正确的方法是获取cell里面的label,更新@之外的text 987654321@ 块。我已经修改了你的代码,更新的代码如下。

if (cell == nil)

    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];

    UILabel *FileNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(10, 0, 100, 30)];
    FileNameLabel.tag = 1000;
    FileNameLabel.backgroundColor = [UIColor clearColor];
    FileNameLabel.font = [UIFont fontWithName:@"Helvetica" size:16];
    FileNameLabel.font = [UIFont boldSystemFontOfSize:16];
    FileNameLabel.textColor = [UIColor blackColor];
     NSLog(@"File Temp 4 array: %@", temp);
    [cell.contentView addSubview: FileNameLabel];
    [FileNameLabel release];




UILabel *fileNameLbl = (UILabel*)[cell.contentView viewWithTag:1000];
fileNameLbl.text =[temp objectAtIndex:indexPath.row];

请检查这是否解决了您的问题。

【讨论】:

【参考方案2】:

这是一个单元格重用问题,因为您设置单元格文本 (FileNameLabel.text =[temp objectAtIndex:indexPath.row];) 的代码仅在您创建新单元格实例时运行。

您需要区分创建新单元格时需要哪些设置,以及重用/准备显示单元格时需要哪些设置。

【讨论】:

【参考方案3】:

如果您有不同的部分,则使用以下代码将值分配给FileNameLabel

FileNameLabel.text =[[temp objectAtIndex:indexPath.section] objectAtIndex:indexPath.row];

【讨论】:

以上是关于DataArray 已更改,但在 UITableView 上不显示新数据 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

启动器图标已更改,但在最近的应用程序中我看到的仍然是默认图标

xarray 笔记:DataArray

获取多维 xarray.DataArray 的 n 个最小值

将DataArray转换为numpy数组

DataArray 删除简单计算中的属性

更改 UITableViewCell 内的 UIView 高度