2010-04-01 4 views
0

Je travaille sur une vue qui sélectionne une image (graphique) basée sur l'entrée de l'utilisateur à travers un sélecteur dépendant qui utilise un fichier plist qui contient trois tableaux contenant environ 40 chaînes chacun.fuite de mémoire avec sélecteur? (iphone App)

Environ 50% du temps lorsque je lance l'application, il s'arrête juste immédiatement, mais les autres fois qu'il fonctionne, il fonctionnera bien jusqu'à ce que je commence à défiler dans le sélecteur où il se bloque après environ 4 secondes. Il ne montrera pas non plus l'un des noms de tableau sur le composant de gauche.

J'ai essayé d'exécuter l'application avec l'analyseur pour vérifier une fuite de mémoire, mais cela ne fonctionnera pas du tout si j'utilise l'analyseur en mode fuite de mémoire. Le code est presque directement tiré d'un livre.

Voici le code correspondant:

-(void) viewDidLoad { 
     [super viewDidLoad]; 
     UIImageView *tempImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"US High Index.jpg"]]; 
     self.imageView = tempImageView; 
     NSString *string = @"US High Index"; 
     self.chartNameLabel.text = string; 
     [string release]; 
     [tempImageView release]; 


    scrollView.contentSize = CGSizeMake(imageView.frame.size.width , imageView.frame.size.height); 
    scrollView.maximumZoomScale = 4.0; 
    scrollView.minimumZoomScale = .05; 
    scrollView.clipsToBounds = YES; 
    scrollView.delegate = self; 

    [scrollView addSubview:imageView]; 

    NSBundle *bundle = [NSBundle mainBundle]; 
    NSString *plistPath = [bundle pathForResource:@"ChartTypes" ofType:@"plist"]; 

    NSDictionary *dictionary = [[NSDictionary alloc]initWithContentsOfFile:plistPath]; 

    self.chartsDictionary = dictionary; 


    NSArray *components = [self.chartsDictionary allKeys]; 
    self.chartTypes = components; 


    NSString *selectedChartType = [self.chartTypes objectAtIndex:0]; 
    NSArray *array = [chartsDictionary objectForKey:selectedChartType]; 
    self.charts = array; 

    [dictionary release]; 
    [array release]; 

    [selectedChartType release]; 
    [plistPath release]; 
    [bundle release]; 
} 



-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 
    return 2; 
} 

    -(NSInteger)pickerView:(UIPickerView *)pickerView 
    numberOfRowsInComponent:(NSInteger)component { 
     if (component == kChartTypeComponent) 
      return [self.chartTypes count]; 

      return [self.charts count]; 

    } 

    #pragma mark Picker delegate methods 
    -(NSString *)pickerView:(UIPickerView *)pickerView 
    titleForRow:(NSInteger)row 
       forComponent:(NSInteger)component { 
     if (component == kChartTypeComponent) 
      return [self.chartTypes objectAtIndex:row]; 

      return [self.charts objectAtIndex:row]; 



    } 

    -(void)pickerView:(UIPickerView *)pickerView 
      didSelectRow: (NSInteger)row 
      inComponent:(NSInteger)component { 
     if (component == kChartTypeComponent) { 
      NSString *selectedChartType = [self.chartTypes objectAtIndex:row]; 
      NSArray *array = [chartsDictionary objectForKey:selectedChartType]; 
      self.charts = array; 
      [picker selectRow: 0 inComponent:kChartComponent animated: YES]; 
      [picker reloadComponent:kChartComponent]; 

     } 
     } 

Répondre

3

Je pense que vous ne devez pas appeler

[array release]; 
[selectedChartType release]; 

dans votre méthode de viewDidLoad, parce que les deux objets sont autoreleased. Peut-être que cela pourrait causer le crash.

+0

thx, on dirait que ça l'a fait – Brodie