iPhone发布版本与调试版本的功能不同

时间:2009-08-31 17:44:51

标签: iphone build ios-simulator release

在使用调试版本时,我的程序按照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);
    }
}       

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

我们非常感谢任何建议/解决方案/想法。 提前谢谢!

1 个答案:

答案 0 :(得分:0)

如何将发布版本添加到您的设备上?或者你的意思是Ad Hoc构建吗?

在任何一种情况下,您是否有任何#define或#ifdef代码块在执行发布版本时可能已被注释掉了?

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