0

私の iOS アプリには、加速度計を使用して UIImageView を移動するビューがあります。ビューを終了してメイン画面に戻ると、アプリがクラッシュします。理由がわかりません。viewDidUnload メソッドには次のものがあります。

[ball removeFromSuperview];

.h ファイル内:

@interface PlayShotguniPad : UIViewController  <UIAccelerometerDelegate> {

// Declare IBOutlets for the moving fly
IBOutlet UIImageView *ball;

// Floats for the movement data
float valueX;
float valueY;

}

.m には、ハエを動かす次のコードがあります。

-(void)awakeFromNib {
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:1.0/100.0];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
}

// Get accelerometer movement data, move fly with device tilt
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
valueX = acceleration.x*60.0;
valueY = acceleration.y*60.0;

int newX = (int)(ball.center.x +valueY);
if (newX > 1000-BALL_RADIUS)
    newX = 1000-BALL_RADIUS;
if (newX < 0+BALL_RADIUS)
    newX = 0+BALL_RADIUS;

int newY = (int)(ball.center.y +valueX);
if (newY > 740-BALL_RADIUS)
    newY = 740-BALL_RADIUS;
if (newY < 0+BALL_RADIUS)
    newY = 0+BALL_RADIUS;

CGPoint newCenter = CGPointMake(newX, newY);

ball.center = newCenter ;

}

viewDidLoad メソッド:

[self awakeFromNib];

クラッシュを防ぐために、ビューを離れるときに何かを解放するなど、何かしなければならないことはありますか?

4

1 に答える 1

1

dealloc で加速度計デリゲートを nil に設定する必要があります。そうしないと、存在しなくなったビュー コントローラーのセレクターが呼び出されます。

- (void)dealloc {
[[UIAccelerometer sharedAccelerometer] setDelegate:nil];
}
于 2012-09-23T08:32:18.323 に答える