Question

(presque résolu, mais pas tout à fait) (Ma solution temporaire consiste à utiliser une méthode vide et l'appeler à chaque bouton, et de cette façon que je peux modifier le code utilisé par plusieurs boutons plutôt que lorsque des améliorations avoir à modifier chaque boutons individuels si des états)

Je parie que c'est une erreur très simple que je l'ai fait, mais je ne peux pas le trouver.

Je suis en train de montrer une alerte précédemment définie lorsqu'un entier atteint 50; c'est l'instruction if que j'utilise dans la méthode viewDidLoad:

if(count == 50){
    [alert show];
}

Lorsque l'entier 50, rien ne se passe. Où ai-je passé?

L'entier est changé comme celui-ci dans un IBAction:

 count+=10;

Si je retire l'instruction if et juste laisser l'alerte pour montrer, il affiche lors du chargement de la vue. Donc, l'alerte est pas le problème.

Quelqu'un a fait remarquer que si ce code est exécuté qu'une seule fois dans la méthode viewDidLoad et l'entier est modifié à 50 à un stade ultérieur, il ne sera pas attendre l'entier à 50, va plutôt voir la valeur de ne pas être 50 et pas exécuter l'alerte jamais.

Alors, comment pourrais-je regarder l'entier avec le code, et exécuter une alerte lorsque l'entier est 50, Mais pas appeler l'alerte dans l'action qui augmente le nombre entier?

Oh, et par la façon dont je l'ai essayé d'appeler l'instruction if dans l'action qui augmente le nombre entier et qui fonctionne, mais j'ai environ 100 boutons qui augmentent le nombre entier et vérifier si la valeur est de 50 dans chaque et chaque bouton semble un espace de consommation et peu de temps pour tout ce copier-coller. Je prévois aussi d'avoir plus que juste une alerte se produisent lorsque l'entier atteint 50. Je suis sûr qu'il ya un moyen plus efficace de vérifier si la juste valeur du nombre entier est de 50.

Était-ce utile?

La solution

Essayez d'ajouter

if(count == 50){
    [alert show];}

Dans le même droit IBAction après avoir ajouté 10 à compter.

Autres conseils

Quand vous dites

  

Mais quand l'entier 50 rien ne se passe

Cela me conduit à croire que vous changez la valeur entière après la méthode -viewDidLoad fonctionne. Votre instruction if est évaluée uniquement une fois, lorsque les charges de vue, donc si vous changez la valeur de l'entier après ce point, vous aurez besoin d'ajouter l'affichage des alertes à tout ce qui change l'entier.

Cela devrait être bien - Objective-C est une couche mince sur le dessus de C, donc une syntaxe valide C devrait fonctionner. Quel type de variable est compter? Vous souhaitez définir comme un int, pas NSNumber. NSNumber est une classe qui enveloppe un certain nombre de sorte qu'il peut être utilisé comme un objet Objective-C -. Mais vous ne pouvez pas les comparer en utilisant la syntaxe ==

L'espoir qui aide!

Vérifier hors valeur clé d'observation

Si vous faites le compteur une propriété, vous devriez être en mesure de configurer un observateur qui se déclenche chaque fois que les changements de valeur. Dans cet observateur, vous pouvez faire votre chèque au feu de l'alerte.

Essayez

NSLog(@"count is %d",count); 

et voir s'il y a le problème. Il est difficile de dire si le nombre est foiré ou une alerte, mais le problème est pas avec votre instruction if lui-même.

quelques choses à essayer,

  • définir un point d'arrêt sur l'instruction if
  • modifier l'instruction if à count >= 50
  • est vraiment compter un int ou est-ce un flotteur?

La réponse la plus simple. Avoir toutes les choses qui incrémente count passer par une méthode dans votre contrôleur pour le faire et avoir ce contrôle de méthode s'il est temps de montrer l'alerte

La réponse plus complexe qui implique de regarder la valeur: Valeur clé d'observation . Vous pouvez mettre en place un observateur de regarder la valeur et répondre à l'alerte quand il frappe 50. Mais cela prendra plus de code et d'être plus compliqué et sujettes aux bugs que simplement l'introduction d'une méthode centrale pour gérer le comportement.

Je ne comprends pas, pourquoi ne pouvez pas vous montrer l'alerte dans le code qui incrémente le compteur? Il a besoin saillir une référence au UIAlertView ... ou poster une notification le code d'alerte est maintenant écoute.

viewDidLoad est exécuté uniquement lorsque votre point de vue est chargé - c'est lors de sa création. Après cela, il ne sera pas courir à nouveau, sauf circonstances particulières.

Si vous voulez vérifier le nombre chaque fois que vous appuyez sur un bouton et d'augmenter le nombre, puis le faire dans le IBAction.

Vous pouvez faire une méthode qui vérifie le compteur comme si

-(BOOL) checkCounter
{
  return count == 50;
}

Et appelez dans vos boutons comme si après avoir incrémenté il:

if ([self checkCounter])
{
//do stuff when it's 50
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top