私のプログラムは、デバッグビルドを使用するときに、iPhoneシミュレータとiPhone自体の両方で使いたい方法で動作します。しかし、リリースビルドに変更すると、iPhoneシミュレータでは動作しますが、デバイスでは動作しません。私は、タイマーを使ってボールをアニメーション化しようとしています。画面の端にボールが衝突すると、ボールは側面からはね返ります。これはデバッグビルドでうまく動作しますが、リリースビルドはデバイスではなくシミュレータでのみ動作します。リリースビルドではボールはデバイス上を移動しません。iPhoneリリースビルドがデバッグビルドと同じ機能を果たさない
これは、デバッグからリリースビルドに切り替えたときに変更される最適化レベルと関係があります。これが正しい場合、最適化レベルに合わせてコードを変更するにはどうすればよいですか?
ビューコントローラがinitWithNibNameと呼ばれている:含む:
CGRect ballRect = CGRectMake(133, 424, 55, 56);
newBall = [[Ball alloc] initWithFrame: ballRect];
[self.view addSubview: newBall];
[self setImage: [UIImage imageNamed: @"Red.png"]];
ボール* newBallは、インターフェイスファイルで宣言されました。ボールはすべてのビルドで正しいイメージで画面に正しく表示されます。
-(void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event{
touch = [touches anyObject];
touchPoint = [touch locationInView: self.view];
dx = touchPoint.x - newBall.center.x;
dy = touchPoint.y - newBall.center.y;
newBallTimer = [NSTimer scheduledTimerWithTimeInterval: 1.0/50.0 target: self selector: @selector(moveBall) userInfo: nil repeats: YES];
}
するCGPointタッチポイント、UITouch *タッチ、フロートDX、フロートDYとNSTimer * newBallTimerはあまりにもインターフェイスファイルで宣言された:ユーザーが画面をタップしたときにボールを移動するための
タイマーが呼び出されます。ここで
はボールを移動し、衝突を検出するための私のコードです:ボールが動かないデバイス上のリリースビルドで
-(void) moveBall
{
newBall.center = CGPointMake(newBall.center.x + dx, newBall.center.y + dy);
// left boundary
if(newBall.frame.origin.x <= 20)
{
dx = abs(dx);
}
else if(newBall.center.x >= 280)
{
dx = -abs(dx);
}
}
。代わりに、それは画面の下部に送信され、そこにとどまるようです。
どのような提案や解決策やアイデアも高く評価されています。 ありがとうございます!
私はコードを見せなければならないでしょう。できるだけコードを減らそうとすると、バグを見つけやすくなります。プロセス中にバグを発見することさえあります。 – zoul
私はいくつかのコードを投稿しました。お役に立てれば。 –
違いについては、2つのビルド構成を比較してください。たぶん、デバッグで定義されたものがあるかもしれませんが、リリースでは定義されていません。シミュレータは必ずしも正しいとは限りませんので、その式から除外してください。 – Jab