Question

J'essaie d'afficher une vue d'alerte dès que cette vue apparaît (sans utiliser de bouton). Dans viewcontroller.m, j'ai:

- (void) viewWillAppear:(BOOL)animated
{
    UIAlertView *alert = [[UIAlertView alloc]
initWithTitle: @"User Information" message: @"Hello"
                              delegate: self cancelButtonTitle:nil otherButtonTitles: @"Continue", nil];

    [alert show];

    [alert release];
}

et dans viewcontroller.h j'ai:

IBOutlet UIView *alert; 

Je n'ai rien fait dans mon fichier .xib.

Une fois exécuté sur le simulateur, la console affiche le texte suivant:

2009-11-30 23: 41: 36.079 BatteryApp [867: 20b] *** Application terminée en raison d'une exception non capturée 'NSInternalInconsistencyException', raison: '- [UIViewController _loadViewFromNibNamed: bundle:] a chargé le " BatteryAppViewController " mais la sortie de vue n’a pas été définie. '

Des idées pour lesquelles je me suis trompé, quelque chose à voir avec mon xib?

Éditer // Je connecte l'alerte à une nouvelle vue de ma xib, toujours pas de chance

Était-ce utile?

La solution

Le problème est que les deux animations principales (l'une pour afficher la vue actuelle et l'autre pour afficher l'alerte) se chevauchent. Vous devez séparer ces deux déplacements d’animation en procédant comme suit:

  1. Le code d'alerte doit-il figurer dans viewDidAppear plutôt que viewWillAppear

  2. Appelez [alert performSelector: @selector (show) withObject: nil afterDelay: 0.0] . Cela garantit que l'alerte se produit une fois l'animation terminée.

Vous devrez peut-être faire attention de ne pas publier encore alert . Si j'étais vous, j'aurais une méthode distincte (par exemple, showHelloAlert), puis je l'appellerais à partir de viewDidAppear:

- (void)viewDidAppear: (BOOL)animated {
  [self performSelector:@selector(showHello) withObject:nil afterDelay:0.0f];
  [super viewDidAppear:animated];
}

Autres conseils

Essayez de placer l'alerte dans viewDidAppear.

Aussi, à quoi sert l'iboutlet? Essayez de prendre le tout.

Ouvrez votre fichier xib dans Interface Builder et faites glisser le contrôle du propriétaire du fichier (qui doit être de classe BatteryAppViewController ) sur votre vue (et non de l'alerte), puis sélectionnez la vue dans le menu qui apparaît. . Le journal indique que vous n'avez pas établi cette connexion à la sortie.

Vous ne connectez pas UIAlerts dans Interface Builder. Les alertes ne possèdent pas de nibs personnalisables, vous ne pouvez donc pas les charger dans le générateur d'interface. Vous devez supprimer le:

IBOutlet UIView *alert;

... complètement.

Le message d'erreur indique qu'aucune vue n'a été définie pour votre contrôleur de vue. Vous devez configurer cela dans Interface Builder.

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