0

使用调试版本时,我的程序在 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"]];

Ball *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 touchPoint、UITouch *touch、float dx、float 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);
    }
}       

在设备上发布版本时,球不会移动。相反,它似乎被发送到屏幕底部并停留在那里。

任何建议/解决方案/想法都将受到高度赞赏。提前致谢!

4

1 回答 1

0

您如何将版本构建到您的设备上?还是您的意思是 Ad Hoc 构建?

无论哪种情况,您是否有任何 #define 或 #ifdef 代码块在您进行发布构建时可能被注释掉?

另一种可能性是在 NSAssert 中执行实际逻辑,然后在发布版本中关闭断言。当您关闭断言时,该断言中的任何代码都不会被调用。

于 2009-08-31T19:10:11.713 回答