2009-11-10 2 views
0

Ok, le problème est que lorsque mon application fonctionne sur le simulateur, elle semble fonctionner correctement. Sur l'appareil, cependant, il ne met pas à jour toutes les étiquettes. Je pense que l'erreur est quelque part ici:Une instruction IF semble fonctionner correctement sur le simulateur, mais pas sur le périphérique!

- (IBAction)buttonclick1 { 

    self.startDate = [NSDate date]; 
    double value = [self Level]; 
    double value2 = [self Level2]; 


if ((value2 - value) >= 3.0) { 

    ifWork.text = @"DONE!"; 
    ifWork.textColor = [UIColor yellowColor]; 

    float noSeconds = (float) [self.startDate timeIntervalSinceNow]; 
    } 
} 

Je suis nouveau à ce jeu. Ce que je cherche, c'est quand le bouton est pressé, il fois combien de temps cela prend pour qu'un événement se produise. Je voudrais ensuite utiliser cette fois dans les calculs.

Je sais que l'instruction IF est correcte car elle fonctionne sur le simulateur. Cependant sur l'appareil, quand value et value2 diffèrent de 3 et que l'on appuie sur le bouton, rien ne se passe (l'étiquette ifWork ne change pas!).

Toute aide serait appréciée,

Stu

+0

avez-vous parcouru le code pour vous assurer que l'instruction if est en cours d'exécution sur l'appareil? – Daniel

+0

Je pense que c'est lié http://discussions.apple.com/thread.jspa?threadID=1685984 mais je ne sais pas comment l'utiliser pour mon code car il utilise des nombres. – Stumf

+0

Comment sont déclarés et initialisés Level et Level2? Quelles valeurs les croyez-vous avoir au moment de cet appel? –

Répondre

2

Est-ce que vous exécutez le code dans le débogueur pour voir ce qui se passe? Peut-être que si les valeurs dépendent de quelque chose comme les performances du processeur ou du réseau, vous pouvez rencontrer des différences notables entre le simulateur et le périphérique réel, donc vous ne pouvez pas être sûr que ce qui fonctionne sur le simulateur fonctionne sur le périphérique.

+0

Merci pour votre réponse et vos idées, le code est lié à une valeur qui diminue continuellement. Cela ne dépend pas du réseau ou du processeur. La minuterie est-elle correcte? L'étiquette ne change même pas ... Quelque chose ne va pas avec ça! Stu – Stumf

+0

Pour calculer le temps écoulé, j'inverser le second horodatage à [[NSDate date] timeIntervalSinceDate: self.startDate]; sinon vous obtenez une valeur négative. Si vous mettez un point d'arrêt à l'instruction if (...) et exécutez le programme sur le simulateur, obtenez-vous les valeurs attendues? – Alfonso

+0

Désolé, j'ai fait une erreur dans le post précédent. La question intéressante est bien sûr, si vous obtenez les bonnes valeurs sur l'appareil réel. – Alfonso

1

Il peut y avoir plusieurs raisons.

  • résultats Niveau1 ou Level2 pourraient être différentes sur l'appareil (en utilisant la mémoire non initialisée qui est différent sur l'appareil
  • valeur2 - valeur1 pourrait être très proche de 3,0, mais un peu moins (doubles sont souvent un peu imprécise)
  • ifWork pourrait être mal placé sur l'appareil (c.-à-nul) rien ne se passe.

la meilleure solution est de débogage sur le périphérique (étape sur cette ligne de code en ligne) et vérifier si l'une de ces choses sont vraies

+0

Le fait que j'ai utilisé> = 3.0 ne signifie-t-il pas que la précision n'est pas aussi importante? Il n'a pas besoin d'être exactement 3.0. – Stumf

+0

Si vous avez effectué un calcul que vous vous attendez à donner 3.0 mais le résultat dans le double est en fait 2.99999999999998756 alors cela fait une différence. Si vous ne vous souciez pas des cas limites, cela n'a pas d'importance. Si vous vous souciez des cas de bordure, vous devrez peut-être utiliser> = 2.995 ou quelque chose de similaire. –

Questions connexes