0

buttonString(an NSString)の値を別のViewControllerに渡す次のコードがあります。buttonString = imageName;が設定されてから他のViewControllerで呼び出されると、アプリがクラッシュします。

@interfaceの前のFirstViewControllerの.hファイル:

extern NSString* buttonString;

実装前のFirstViewControllerの.mファイル:

NSString* buttonString = nil;

そしてここにコードがあります:

NSString *imageName = [NSString stringWithFormat:@"myImage_%d.png", selectNum + 1 ];
NSLog(@"imageName is %@", imageName);

[buttonImage setImage:[ImgUtil image:imageName]];

buttonString = imageName;

NSLog(@"buttonString %@", buttonString);

SecondViewControllerこれが呼び出されたときに問題が発生します。

NSLog(@"button Message is %@", buttonString);

を削除し buttonString = imageName;FirstViewControllerも、アプリはクラッシュしません。

助けてくれてありがとう。

4

1 に答える 1

3

これはbuttonString、解放されたオブジェクトを指しているために発生しています。

コードセグメントから、imageNameは自動リリースされたNSStringです。あなたが言うとき、それはただと同じアドレスをbuttonString = imageName;指しています。このメソッドが終了すると、解放され、ポイントしていたメモリも解放されます。buttonStringimageNameimageNamebuttonString

これがbuttonString、NSLogで参照するとアプリがクラッシュする理由です。

理想的には、Objective Cでこのようなグローバル変数を使用してデータを共有するべきではありません。しかし、これを機能させたいだけbuttonStringの場合は、最初に使用するときにメモリを割り当てる必要があります。後で役に立たなくなったら、必ずリリースしてください。 注:それでも、物事を行うには悪い方法になります。

于 2012-05-29T10:48:32.330 に答える