2010-11-29 4 views
1

ビューが表示されたら.plistからいくつかのデータ(設定)にアクセスしています。そのデータにアクセスするためにviewDidAppear:(BOOL)animatedメソッドを使用すると、すべてがうまく機能しています。しかし、データにアクセスするためにviewWillAppear:(BOOL)animatedメソッドを使用してデータにアクセスすると、すべてが停止し、EXC_BAD_ACCESSエラーが発生します。viewWillAppear:(BOOL)アニメーションメソッドを使用しているときにEXC_BAD_ACCESSが表示されます

誰かが私を助けてくれますか?

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

あなたは私たちのためにコードを投稿できますか?ビューが最初に表示されるときはこれがありますか?またはあなたがそれに戻った時だけ? – MCannon

+0

私はそれに戻ったときに...私はそれがオブジェクトを解放することと関係があるかもしれないと思っています – cgossain

答えて

4

[imageLow release][imageHigh release]呼び出しは不要であり、クラッシュの原因となります。 imageNamed:によって返されたオブジェクトはあらかじめオートレリースされているので、自分で解放する必要はありません。

+0

それを指摘してくれてありがとう、私の問題を解決しました – cgossain

+1

'imageNamed:'オートリリースされます。あなたが気にする必要があるのは、返されたオブジェクトを所有しているかどうかだけです。そうしたら、完了したらそれを放つ必要があります。メソッドの名前は所有権を意味するものではないため、公開する必要はありません。すでに自動リリースされているかどうかなど、実装の詳細について考える必要はありません。 – dreamlax

2

また、あなたのviewWillAppearメソッドでスーパーへの呼び出しを持っている必要があります。

[super viewWillAppear:animated] 

クラッシュを引き起こしているものではないですが、ドキュメントは、それが必要だと言うこと。

+0

ありがとうございます – cgossain

関連する問題