iPhone: dialogue UIAlert affiche 3 fois pour chaque appel
-
20-09-2019 - |
Question
J'ai un UIAlert qui apparaît 3 fois chaque fois qu'il est appelé. Il apparaît et disparaît avant que je puisse cliquer dessus. Se pourrait-il que le viewDidLoad
lui-même est appelé 3 fois?
Je mis en place un UIAlert dans le viewDidLoad
de mon application:
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:alertMessage delegate:self cancelButtonTitle:ok otherButtonTitles:nil];
Ceci est le viewDidLoad
dans le RootViewController, qui gère les points de vue:
- (void)viewDidLoad {
Kundenkarte *kartenAnsicht = [[Kundenkarte alloc]
initWithNibName:@"Kundenkarte" bundle:nil];
kartenAnsicht.rootViewController = self;
kartenAnsicht.viewDidLoad;
self.map = kartenAnsicht;
[self.view addSubview:kartenAnsicht.view];
[kartenAnsicht release];
// [super viewDidLoad];
}
Le viewDidLoad
qui évoque la UIAlert se trouve dans le contrôleur de vue kartenAnsicht
.
J'espère que quelqu'un peut me aider parce que je suis d'idées.
La solution
Tout d'abord, vous ne devriez jamais mettre tout type d'affichage dans viewDidLoad
. Cette méthode est destinée à la configuration derrière des scènes après la vue est d'abord lu à partir nib. Il n'y a pas de certitude qu'il sera appelé à chaque fois que la vue affiche parce que, après la première fois il charge, la vue peut-être conservés en mémoire et non rechargées à partir nib.
Au lieu de cela, mettre l'appel d'évoquer le NSAlert dans viewWillDisplay
ou viewDidDisplay
. Cela permet d'afficher l'alerte à chaque fois le point de vue apparaît.
Je doute que viewDidLoad
est appelé trois fois, mais de vérifier que vient de mettre un NSLog dans la méthode pour voir combien de fois il est appelé.
Quand vous dites que:
i mis en œuvre un NSAlert dans le viewDidLoad () de mon application:
... qu'est-ce que cela signifie? Quel objet a exactement la méthode? S'il est le délégué de l'application, cela ne fonctionnera pas parce que le protocole d'application délégué ne répond pas à viewDidLoad
. Il doit être dans un UIViewController.
Edit01:
Voir ce poste qui avait le même problème: UIAlertView Pops trois fois par appel au lieu d'une seule fois
Réponse courte: Vous tuez l'alerte en le libérant. Soit le conserver comme propriété du contrôleur de vue ou mieux encore, afficher l'alerte avec runModal
au lieu de show
et capturer le numéro de bouton retourné immédiatement.
Autres conseils
Vous ne le mécanisme NIB-chargement pas besoin d'appeler -viewDidLoad
vous, il est géré automatiquement. Cela signifie que vous obtenez des invocations supplémentaires de -viewDidLoad
:. Un par la conception et extras chaque fois que vous appelez
Il serait utile de voir le code autour de l'appel d'alerte.
J'utilise une alerte chaque fois que les changements de joignabilité. Depuis joignabilité est vérifié à plusieurs reprises, l'alerte pourrait s'appelé à plusieurs reprises. Pour remédier à cela, j'Enroulez le code d'alerte comme ceci:
if (!myAlert) { /* set up and show myAlert */ }
Cependant, un problème est que lorsque vous cliquez sur le bouton Annuler, l'alerte demeurera non nul, et ne peut donc jamais montrer à cause de cette condition. Si quelqu'un pourrait ajouter à cette réponse avec une solution pour cela, ce serait génial. Je suppose que je peux ajouter un gestionnaire pour le bouton d'annulation qui détruira myAlert.