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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top