NSMutableArray и UITableVIew (exc_bad_access) - PullRequest
0 голосов
/ 10 января 2012

У меня есть объект "Consumo"

-(id)initWithDictionary:(NSDictionary *)consumo{
    self = [super init];

    if (self != nil)
    {
        fechaLectura = [consumo objectForKey:@"fechaLectura"];
        tarifa = [consumo objectForKey:@"tarifa"];
        consumoBase = [consumo objectForKey:@"consumoBase"];
        consumoHP = [consumo objectForKey:@"consumoHP"];
        reactivoLeido = [consumo objectForKey:@"reactivoLeido"];
        reactivoFacturado = [consumo objectForKey:@"reactivoFacturado"];
        demandaFPLeida = [consumo objectForKey:@"demandaFPLeida"];
        demandaFPFacturada = [consumo objectForKey:@"demandaFPFacturada"];
        demandaHPLeida = [consumo objectForKey:@"demandaHPLeida"];
        demandaHPFacturada = [consumo objectForKey:@"demandaHPFacturada"];
        calificacion = [consumo objectForKey:@"consumo"];
    }
    return self;
}

viewController.h

   @interface ConsumoViewController : UIViewController <UITableViewDelegate, UITableViewDataSource>  {
    IBOutlet UILabel * sumLabel;
    NSMutableArray * consumos;
    IBOutlet UITableView *tablaConsumo;
    NSMutableArray * titulosConsumo;
    Consumo * cons;
}

@property (nonatomic,retain) IBOutlet UILabel * sumLabel; 
@property (nonatomic,retain) NSMutableArray * consumos;
@property (nonatomic,retain) UITableView * tablaConsumo;
@property (nonatomic,retain) NSMutableArray * titulosConsumo;
@property (nonatomic,retain) Consumo * cons;
@end

viewcontroller.m (включая просмотр таблицы)

- (void)viewDidLoad
{
        consumos = [[NSMutableArray alloc] init];
        NSDictionary * dict;

        for (int i = 0; i < [suministro count]; i++){ /* suministro = array to dictionary */

            dict=[suministro objectAtIndex:i];
            cons = [[Consumo alloc] initWithDictionary:dict];
            [consumos insertObject:cons atIndex:i];
        }

}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
   static NSString *CellIdentifier = @"Cell";
   UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
   if (cell == nil) {
      cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];

 detFechaLectura = [[[UILabel alloc] initWithFrame:CGRectMake(10.0, 20.0, 120.0, 20.0)] autorelease];
        detFechaLectura.tag = LABELSUP1;
[cell.contentView addSubview:detFechaLectura];
}else{
  detFechaLectura = (UILabel *)[cell.contentView viewWithTag:LABELSUP1];
}

 detFechaLectura.text = [[consumos objectAtIndex:indexPath.row] fechaLectura];

 return cell

}

}

Проблема:

detFechaLectura.text = [[consumos objectAtIndex: indexPath.row] fechaLectura];(Поток 1: Программа получила сигнал: «EXC_BAD_ACCESS»)

Я надеюсь, что смогу помочь.спасибо

Ответы [ 2 ]

1 голос
/ 10 января 2012

Вам нужно назначить свойства, а не переменные экземпляра, чтобы правильно сохранить ваши значения.

if (self != nil)
{
    self.fechaLectura = [consumo objectForKey:@"fechaLectura"];
    self.tarifa = [consumo objectForKey:@"tarifa"];
    self.consumoBase = [consumo objectForKey:@"consumoBase"];
    self.consumoHP = [consumo objectForKey:@"consumoHP"];
    self.reactivoLeido = [consumo objectForKey:@"reactivoLeido"];
    self.reactivoFacturado = [consumo objectForKey:@"reactivoFacturado"];
    self.demandaFPLeida = [consumo objectForKey:@"demandaFPLeida"];
    self.demandaFPFacturada = [consumo objectForKey:@"demandaFPFacturada"];
    self.demandaHPLeida = [consumo objectForKey:@"demandaHPLeida"];
    self.demandaHPFacturada = [consumo objectForKey:@"demandaHPFacturada"];
    self.calificacion = [consumo objectForKey:@"consumo"];
}

И в методе dealloc вам нужно освободить каждый из них без self.

-(void)dealloc
{
    [fechaLectura release];
    // ... 
    [calificacion release];

    [super dealloc];
}
1 голос
/ 10 января 2012

Это связано с управлением памятью.Вам необходимо retain объекты из вашего словаря в вашем методе init:

fechaLectura = [[consumo objectForKey:@"fechaLectura"] retain];

Если ваше свойство настроено на сохранение, вы должны использовать self. для доступа к нему следующим образом:

self.fechaLectura = [consumo objectForKey:@"fechaLectura"];
...