0

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

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;
}
4

2 回答 2

0

您重新使用单元格的代码看起来非常简单和合适。我怀疑您的 xib 文件搞砸了,并且您的单元格没有正确归类为ACDownloadCell.

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

registerNib:forCellReuseIdentifier:

更多信息可以在这里看到

于 2013-04-28T06:06:45.357 回答
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.
}
于 2013-04-28T03:12:04.837 回答