开发者

iPhone strange behaviour in UITableViewController

开发者 https://www.devze.com 2023-03-06 09:21 出处:网络
i have a cell with an UIView (called: message), with 2 UILabel (label, dataLabel) and 1 UIButton (iconButton).

i have a cell with an UIView (called: message), with 2 UILabel (label, dataLabel) and 1 UIButton (iconButton).

If i release dataLabel and iconButton, i receive an error in runtime. If I release the others no problems occurred.

Can you please help me?

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

static NSString *CellIdentifier = @"Cell";

UIImageView *balloonView;
UILabel *label;
UIButton *iconButton;
UILabel *dataLabel;


UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cellID"] autorelease];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
    tableView.separatorStyle = UITableViewCellSeparatorStyleNone;

    UIView *message = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, cell.frame.size.width, cell.frame.size.height)];
    message.tag = 1;

    dataLabel = [[UILabel alloc] initWithFrame:CGRectZero];
    dataLabel.backgroundColor = [UIColor clearColor];
    dataLabel.textColor = [UIColor darkGrayColor];
    dataLabel.tag = 2;
    dataLabel.numberOfLines = 0;
   开发者_Go百科 dataLabel.lineBreakMode = UILineBreakModeWordWrap;
    dataLabel.font = [UIFont systemFontOfSize:11.0];
    dataLabel.textAlignment = UITextAlignmentCenter;
    dataLabel.opaque = YES;

    balloonView = [[UIImageView alloc] initWithFrame:CGRectZero];
    balloonView.tag = 3;
    balloonView.image = nil;

    label = [[UILabel alloc] initWithFrame:CGRectZero];
    label.backgroundColor = [UIColor clearColor];
    label.tag = 4;
    label.numberOfLines = 0;
    label.lineBreakMode = UILineBreakModeWordWrap;
    label.font = [UIFont systemFontOfSize:14.0];
    label.opaque = YES;

    iconButton = [UIButton buttonWithType:UIButtonTypeCustom];
    iconButton.tag = 5;

    [message addSubview:dataLabel];
    [message addSubview:balloonView];
    [message addSubview:label];
    [message addSubview:iconButton];

    [cell.contentView addSubview:message];

    [balloonView release];
    [label release];
    [message release];
}
else {
    dataLabel = (UILabel *)[[cell.contentView viewWithTag:0] viewWithTag:2];
    balloonView = (UIImageView *)[[cell.contentView viewWithTag:0] viewWithTag:3];
    label = (UILabel *)[[cell.contentView viewWithTag:0] viewWithTag:4];
    iconButton = (UIButton *)[[cell.contentView viewWithTag:0] viewWithTag:5];
}

dataLabel.frame = CGRectMake(0,0,cell.frame.size.width,20);
dataLabel.text = [NSString stringWithFormat:[[messages objectAtIndex:indexPath.row] valueForKey:DATE_TAG_NAME]];

UIImage *balloon;

[...]

balloonView.image = balloon;    

return cell;}

Thank you!


You dont need to release iconButton as its an autorelease object.

You should release objects only either when you allocate it or retain it.

I dont see any problem in releasing dataLabel. Try releasing dataLabel and skip releasing iconButton and see what happens.

Most probably it was only due to releasing iconButton, which you shouldnt do, as its an autorelease object.

0

精彩评论

暂无评论...
验证码 换一张
取 消