DataArray已更改,但在UITableView上未显示新数据

时间:2013-07-04 11:27:23

标签: ios objective-c iphone uitableview cocoa-touch

我调试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;
}

并在update()

中使用ViewWillAppear
-(void) update
{
      if([FileCompletedArray count] != [temp count])
      {
            temp = [FileCompletedArray mutableCopy];
            NSLog(@"File Temp 1 array: %@", temp);
            [_tableView reloadData];
            NSLog(@"File Temp 2 array: %@", temp);
       }
}

你有解决方案吗?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

在调用reloadData之后,将再次调用cellForRowAtIndexPath,但由于已经创建了单元格,因此tableview将重用该单元格,因此这里正确的方法是在单元格内部获取标签并在{I}之外更新其文本{1}}阻止。我修改了你的代码并在下面给出了更新的代码。

if(cell == nil)

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

答案 2 :(得分:0)

如果您有不同的部分,请将下面的代码值分配给FileNameLabel

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