在使用调试版本时,我的程序按照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);
}
}
在设备上的发布版本中,球不会移动。相反,它似乎被发送到屏幕的底部并留在那里。
我们非常感谢任何建议/解决方案/想法。 提前谢谢!
答案 0 :(得分:0)
如何将发布版本添加到您的设备上?或者你的意思是Ad Hoc构建吗?
在任何一种情况下,您是否有任何#define或#ifdef代码块在执行发布版本时可能已被注释掉了?
另一种可能性是在NSAssert中执行实际逻辑,然后在发布版本中关闭断言。当您关闭断言时,该断言中的任何代码都不会被调用。