2009-08-31 12 views
0

Mon programme fonctionne comme je le souhaite sur le simulateur iPhone et sur l'iPhone lui-même lorsque j'utilise la version de débogage. Cependant, quand je le change pour la version release, cela fonctionne sur le simulateur de l'iPhone mais pas sur l'appareil. J'essaie d'animer une balle à travers l'écran avec une minuterie et la balle devrait rebondir sur les côtés si elle entre en collision avec les bords de l'écran. Cela fonctionne très bien pour les builds de débogage mais la version release ne fonctionne que sur le simulateur et non sur le périphérique. La balle ne bouge même pas sur l'appareil avec la version release.La version de la version iPhone ne fonctionne pas de la même manière que la version de débogage

J'ai l'impression que cela a à voir avec le niveau d'optimisation qui est changé lors du passage d'un débogage à une version finale. Si cela est vrai, comment puis-je changer mon code pour mieux correspondre au niveau d'optimisation?

Le contrôleur de vue est appelée avec initWithNibName: qui contient:

CGRect ballRect = CGRectMake(133, 424, 55, 56); 
newBall = [[Ball alloc] initWithFrame: ballRect]; 
[self.view addSubview: newBall]; 
[self setImage: [UIImage imageNamed: @"Red.png"]]; 

balle * Newball a été déclaré dans le fichier d'interface. La balle est affichée correctement sur l'écran avec l'image correcte sur toutes les constructions.

La minuterie pour déplacer la balle est appelée lorsque l'utilisateur appuie sur l'écran:

-(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 * toucher, dx flotteur, flotteur dy et NSTimer * newBallTimer ont été déclarés dans le fichier d'interface aussi.

Voici mon code pour déplacer la balle et la détection des collisions:

-(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); 
    } 
}  

Sur la version release sur l'appareil la balle ne se déplace pas. Au lieu de cela, il semble être envoyé au bas de l'écran et rester là.

Toutes les suggestions/solutions/idées sont très appréciées. Merci d'avance!

+0

Je suppose que vous devrez nous montrer le code. Essayez de réduire le code autant que possible, il nous sera plus facile de repérer le bug et parfois vous découvrirez le bug vous-même dans le processus. – zoul

+0

Ok, j'ai posté du code. J'espère que cela t'aides. –

+0

Comparez vos deux configurations de construction pour les différences. Peut-être que vous avez quelque chose de défini dans le débogage mais ce n'est pas défini dans la version. Le simulateur n'est pas toujours correct, alors laissez-le hors de l'équation. – Jab

Répondre

0

Comment obtenez-vous la version montée sur votre appareil? Ou voulez-vous dire une construction Ad Hoc?

Dans les deux cas, avez-vous des blocs de code #define ou #ifdef qui sont peut-être mis en commentaire lorsque vous faites la version release?

Une autre possibilité consiste à effectuer une logique réelle dans un NSAssert, puis à désactiver la définition dans la version finale. Lorsque vous désactivez affirme n'importe quel code dans ce assert ne sera pas appelé.

+0

Merci pour votre réponse. Pour mettre la version release sur l'appareil, j'ai défini le SDK actif sur iPhone Device 3.0 et la configuration active sur Release dans Xcode. J'ai des instructions #define ainsi que #include mais aucune n'a été mise en commentaire. Je n'utilise pas NSAssert. –