Неправильный выпуск UILabel в UITableViewCell

У меня есть собственный UITableViewCel, например:

@synthesize poiNameLabel;
@synthesize poiDistanceLabel;

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
    if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
        // Initialization code
        CGRect nlabelframe = CGRectMake(NAMELABEL_X, NAMELABEL_Y, NAMELABEL_WIDTH, NAMELABEL_HEIGHT);
        UILabel *nlabel = [[UILabel alloc] initWithFrame:nlabelframe];
        nlabel.font = [UIFont fontWithName:@"Arial" size:NAMELABEL_FONT];
        nlabel.backgroundColor = [UIColor clearColor];
        nlabel.minimumFontSize = NAMELABEL_FONT_MIN;
        //nlabel.adjustsFontSizeToFitWidth = YES;
        [self addSubview:nlabel];
        self.poiNameLabel = nlabel;
        [nlabel release];

        CGRect dlabelframe = CGRectMake(DISTANCELABEL_X, DISTANCELABEL_Y, DISTANCELABEL_WIDTH, DISTANCELABEL_HEIGHT);
        UILabel *dlabel = [[UILabel alloc] initWithFrame:dlabelframe];
        dlabel.font = [UIFont fontWithName:@"Arial" size:DISTANCELABEL_FONT];
        dlabel.backgroundColor = [UIColor clearColor];
        dlabel.minimumFontSize = DISTANCELABEL_FONT_MIN;
        dlabel.adjustsFontSizeToFitWidth = YES;
        [self addSubview:dlabel];
        self.poiDistanceLabel = dlabel;
        [dlabel release];

        self.contentView.backgroundColor = [UIColor clearColor];
        self.contentView.opaque = NO;

    }
    return self;
}


- (void)setSelected:(BOOL)selected animated:(BOOL)animated {

    [super setSelected:selected animated:animated];

}

- (void)dealloc {
    [super dealloc];
    [poiNameLabel release];
    [poiDistanceLabel release];
}

и вот как я его заполняю:

NSDictionary *dic = [[NSDictionary alloc] initWithDictionary:[poisSource objectAtIndex:row]];
ResultsViewCell *cell = [[[ResultsViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
cell.poiNameLabel.text = [dic objectForKey:@"name"];
float distance = [[dic objectForKey:@"distance"] floatValue];
NSString *distanceWithUnity;
distance = distance*1000;
if (distance > 1000) {
    distanceWithUnity = [NSString stringWithFormat:@"%.2f km", distance/1000];
} else {
    distanceWithUnity = [NSString stringWithFormat:@"%.0f mt", distance];
}
cell.poiDistanceLabel.text = distanceWithUnity;
[dic release];
return cell;

Все в порядке, но когда UITableCell освобождается, я получаю BAD_ACCESS, освобождая poiDistanceLabel.
Я не вижу проблем в своем коде, никаких сохраняемых ошибок, поэтому я не могу понять, что происходит.
Единственное сомнение, которое у меня есть, это о том, как я устанавливаю текст метки: может ли это быть проблемой? Почему это происходит?


person pasine    schedule 16.07.2011    source источник
comment
Когда вы прокручиваете одну из этих ячеек из списка, происходит ли то же самое?   -  person Manuel    schedule 16.07.2011


Ответы (1)


Проблема, похоже, в вашем методе dealloc:

[super dealloc]

должен быть последним вызовом в вашем методе dealloc, чтобы поддерживать объект "живым" во время его освобождения.

person Andriy    schedule 16.07.2011