0

我的应用程序中的 UITableViewController 从 json 数据源中提取数据。我还使用 CG 创建了自定义 UITableViewCell 背景。发生了一个非常有趣的错误,我不知道为什么。我将引导您了解发生了什么以及如何重新创建它:

点击进入表格视图。根本不滚动表格,我立即点击视图中的项目。点击该项目后,我按下后退按钮返回表格视图。如果我向下滚动第一个从屏幕外出现的单元格,则不会有我的自定义背景。它只是单元格的默认设置。然后,如果我继续向下滚动每 10 个单元格,也会遇到同样的问题。

这个错误只发生在这个确切的过程中。如果我在点击一个项目之前滚动表格视图,它就不会发生。

下面是 tableview 控制器的相关代码:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    // Will remove all of the used codes from the table if setting is enabled
    if (self.shouldHideCodes) {
        NSMutableArray *tempArray = [self.jsonCodeData mutableCopy];
        [tempArray removeObjectsInArray:[self.usedCodes usedCodes]];
        self.jsonCodeData = tempArray;
    }

    return [self.jsonCodeData count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell;

    if (self.jsonCodeData) {
        cell = [tableView dequeueReusableCellWithIdentifier:@"code cell"];

        if ([cell isKindOfClass:[CodeCellTVC class]]) {
            CodeCellTVC *tvcCell = (CodeCellTVC *)cell;

            if (![tvcCell.backgroundView isKindOfClass:[CustomCellBackground class]]) {
                tvcCell.backgroundView = [[CustomCellBackground alloc] init];
            }

            NSDictionary *codeDict = [self.jsonCodeData objectAtIndex:indexPath.row];


            // Retrieve code string from dictionary
            NSString *codeText = [NSString stringWithFormat:@"%@", [codeDict objectForKey:@"code"]];

            tvcCell.codeTableLabel.text = codeText;

        }
    }

    return cell;
}

让我困惑的是它的反应方式。当错误发生时,每 10 个单元格都有问题,而不是每个单元格。除了这些方法之外,我没有处理 tableviewcell 本身的任何东西。

4

1 回答 1

0

我理解您的问题,您在初始化单元时做错了,每次初始化单元时,每次为该单元分配内存时,都会产生内存问题。像下面这样编辑代码,它将为您工作。

    cell = [tableView dequeueReusableCellWithIdentifier:@"code cell"];

    if(cell == nil)
    {
        cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"code cell"];
    }
于 2014-05-17T11:13:20.210 回答