3

我将 CustomImageView 添加到 UITableViewCell。

    UITableViewCell *cell = nil;
    if (cell == nil) {
         cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:@"Cell1"] autorelease];
    }
    CustomImageView *customIV = [[CustomImageView alloc] init];
    [cell.contentView addSubView:customIV];
    [customIV release];

但是当我尝试重新加载 tableview 时,会发生错误。

错误调用堆栈如下。

在此处输入图像描述

输出字符串如下。

-[CustomImageView superview]:消息发送到释放的实例 0x1f848f30

4

4 回答 4

1
CustomImageView *customIV = [[CustomImageView alloc] initWithFrame:CGRectMake(x, y, w, h)];
[cell.contentView addSubView:customIV];

当我释放内存时,它就完成了。
所以根据我的说法,不需要释放,因为它会释放内存。

希望它会帮助你。
谢谢。

于 2013-03-07T04:14:18.430 回答
1

尝试评论此行[customIV release];并运行,它不应该在重新加载数据时崩溃。

这背后的原因是每次它尝试创建新的自定义视图并发布它时,都会导致系统额外负载并发生崩溃。

于 2013-03-07T04:40:59.697 回答
1

您只想将图像添加到每个单元格一次。将您的代码更改为:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell1"];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault  reuseIdentifier:@"Cell1"] autorelease];
        CustomImageView *customIV = [[CustomImageView alloc] init];
        [cell.contentView addSubView:customIV];
        [customIV release];
    }

    return cell;
}

如果这不起作用,那么您需要展示您的完整cellForRowAtIndexPath方法。通过仅显示部分代码,您很难提供帮助。

于 2013-03-07T07:29:34.657 回答
0

发生此错误是因为每次CustomImageView创建对象时都cell创建了对象。

所以,最好的方法是首先初始化对象CustomImageView然后创建你的UITableView

诸如此类,

CustomImageView *customIV把它放在你的.h file然后@synthesize它在.m File

(把这段代码放在上面UITableView

self.customIV = [[CustomImageView alloc] init];

然后创建UITableView

self.tablView = [[UITableView alloc]init];
.
.
.
.

并且cellForRowAtIndexPath 只添加[cell.contentView addSubView:self.customIV];

于 2013-03-07T04:33:07.093 回答