iOS自定义表格视图单元格为空

时间:2013-04-28 02:08:15

标签: iphone ios objective-c uitableview

我需要在将一行添加到表视图后调用一个方法,并且我正在尝试这个

if (_tableView) {
    [self.currentDownloads insertObject:url atIndex:0];
    NSLog(@"%@", _currentDownloads);
    [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
    ACDownloadCell *cell = (ACDownloadCell *)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
    [cell downloadFileAtURL:url];
}
else{
    self.tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 320, 499) style:UITableViewStylePlain];
    self.tableView.dataSource = self;
    self.tableView.delegate = self;
    [self.view addSubview:self.tableView];
    [self.currentDownloads insertObject:url atIndex:0];
    NSLog(@"%@", _currentDownloads);
    [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:0 inSection:0]] withRowAnimation:UITableViewRowAnimationAutomatic];
    ACDownloadCell *cell = (ACDownloadCell *)[self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0]];
    NSLog(@"%@", cell);
    [cell downloadFileAtURL:url];
}

但是,当它记录cell时,它会记录(null)。你觉得这里有什么不对的吗?这是我的tableView:cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    ACDownloadCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (!cell) {
        NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"ACDownloadCell" owner:nil options:nil];

        for(id currentObject in topLevelObjects)
        {
            if([currentObject isKindOfClass:[ACDownloadCell class]])
            {
                cell = (ACDownloadCell *)currentObject;
                break;
            }
        }
    }
    return cell;
}

2 个答案:

答案 0 :(得分:0)

因为重用机制。(当你使用cellForRowAtIndexPath来获取单元格时,单元格可能无法创建或不可见,将返回null.cellForRowAtIndexPath返回正确的只有单元格(行和部分)可见。)

xib中的称重传感器可能会导致此问题。但如果按代码创建单元格则不会。

    for(id currentObject in topLevelObjects)
    {
        if([currentObject isKindOfClass:[ACDownloadCell class]])
        {
            cell = (ACDownloadCell *)currentObject;
            break;
        }
    }
    NSLog(@"cell=%@", cell); // will output null.
}

答案 1 :(得分:0)

重新使用您的单元格的代码看起来非常简单和恰当。我怀疑你的xib文件搞砸了你没有把你的单元格恰当地归类为ACDownloadCell

另外,我认为你应该考虑升级到使用

registerNib:forCellReuseIdentifier:

有关此问题的更多信息,请参阅here