2010-11-29 9 views
1

J'accède donc à certaines données (paramètres) à partir d'un .plist lorsque mon affichage apparaît. Lorsque j'utilise la méthode viewDidAppear:(BOOL)animated pour accéder à ces données tout fonctionne très bien et dandy. Mais quand j'accède aux données en utilisant la méthode viewWillAppear:(BOOL)animated pour accéder à mes données tout s'arrête et j'obtiens une erreur EXC_BAD_ACCESS.Je reçois un EXC_BAD_ACCESS lorsque j'utilise la méthode animée viewWillAppear: (BOOL)

Quelqu'un peut-il m'aider s'il vous plaît avec ceci?

- (void)viewDidAppear:(BOOL)animated { 

    NSLog(@"View Will Appear method"); 

    NSString *filePath = [self settingsFilePath]; 
    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) { 

     NSArray *array = [[NSArray alloc] initWithContentsOfFile:filePath]; 

     if ([[array objectAtIndex:0] intValue] == 0) { 
      UIImage *imageLow = [UIImage imageNamed:@"image1.png"]; 
      [object1 setImage:imageLow]; 
      [imageLow release]; 
      unitRatio = 1.8; 
     } 
     else if ([[array objectAtIndex:0] intValue] == 1) { 
      UIImage *imageHigh = [UIImage imageNamed:@"image2.png"]; 
      [object1 setImage:imageHigh]; 
      [imageHigh release]; 
      unitRatio = 0.9; 
     } 

     [array release]; 

    } 
    else { 
     UIImage *imageLow = [UIImage imageNamed:@"image1.png"]; 
     [object1 setImage:imageLow]; 
     [imageLow release]; 
     unitRatio = 1.8; 
    } 

} 
+0

pouvez-vous poster le code pour nous? est-ce quand la vue apparaît pour la première fois? ou seulement quand vous y revenez? – MCannon

+0

quand je reviens dessus ... Je pense qu'il peut avoir quelque chose à voir avec la libération d'objets – cgossain

Répondre

4

Les [imageLow release] et [imageHigh release] appels sont inutiles et provoqueront un accident. Les objets renvoyés par imageNamed: sont préautorisés, vous n'avez donc pas besoin de les libérer vous-même.

+0

qui a résolu mon problème, merci de le signaler – cgossain

+1

Ne soyez pas si sûr que les objets retournés par 'imageNamed:' sont auto-libérés. Tout ce que vous devez savoir est de savoir si vous possédez l'objet retourné. Si vous le faites, vous devez le relâcher lorsque vous avez terminé. Le nom de la méthode n'implique pas la propriété, il n'est donc pas nécessaire de la libérer. Il est inutile et trompeur de penser aux détails de la mise en œuvre, par exemple si elle est déjà publiée automatiquement. – dreamlax

2

De plus, vous devez avoir un appel à super dans votre méthode viewWillAppear:

[super viewWillAppear:animated] 

Ce n'est pas ce qui est à l'origine du crash, mais les docs dire qu'il est nécessaire.

+0

merci, va faire – cgossain