2010-11-29 7 views
1

So habe ich Zugriff auf einige Daten (Einstellungen) von einer .plist wie meine Ansicht erscheint. Wenn ich die viewDidAppear:(BOOL)animated Methode verwende, um auf diese Daten zuzugreifen, funktioniert alles gut und dandy. Aber wenn ich auf die Daten unter Verwendung der viewWillAppear:(BOOL)animated Methode zugreifen, um auf meine Daten zuzugreifen, stoppt alles und ich bekomme einen EXC_BAD_ACCESS Fehler.Ich erhalte eine EXC_BAD_ACCESS bei Verwendung der viewWillAppear: (BOOL) animierte Methode

Kann mir bitte jemand dabei helfen?

- (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

könnten Sie den Code für uns veröffentlichen? Ist das, wenn die Ansicht zum ersten Mal erscheint? oder nur wenn du wieder darauf zurückkommst? – MCannon

+0

wenn ich zurück zu ihm ... Ich denke, es hat vielleicht etwas mit der Freigabe von Objekten – cgossain

Antwort

4

Die [imageLow release] und [imageHigh release] Anrufe sind unnötig und wird zu einem Absturz führen. Die von imageNamed: zurückgegebenen Objekte sind vor der Autorelease freigegeben, sodass Sie sie nicht selbst freigeben müssen.

+0

, die mein Problem gelöst haben, danke für das Aufzeigen – cgossain

+1

Seien Sie nicht so sicher, dass die Objekte von 'imageNamed:' zurückgegeben werden sind Autoreleased. Alles, was Sie beachten sollten, ist, ob Sie das zurückgegebene Objekt besitzen. Wenn Sie dies tun, müssen Sie es freigeben, wenn Sie fertig sind. Der Name der Methode bedeutet nicht, dass es sich um ein Eigentumsrecht handelt, daher ist keine Freigabe erforderlich. Es ist unnötig und irreführend, über Details der Implementierung nachzudenken, z. B. ob es bereits automatisch veröffentlicht wurde. – dreamlax

2

Außerdem müssen Sie einen Aufruf von super in Ihrer viewWillAppear Methode haben:

[super viewWillAppear:animated] 

Das ist nicht, was den Absturz verursacht, aber die docs sagen, dass es erforderlich ist.

+0

danke, werde ich tun – cgossain