2009-11-30 2 views
0

Je tente d'afficher une vue d'alerte dès que la vue apparaît (sans utiliser de bouton). En viewcontroller.m je:Ajout d'une alerte à ViewWillAppear, iPhone

- (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 viewcontroller.h je:

IBOutlet UIView *alert; 

Je ne l'ai pas fait quoi que ce soit à mon dossier .xib.

Lorsqu'il est exécuté sur le simulateur, je reçois le texte suivant dans la console:

2009-11-30 23: 41: 36,079 BatteryApp [867: 20b] *** Mettre fin à l'application du fait exception uncaught 'NSInternalInconsistencyException', la raison : '- [UIViewController _loadViewFromNibNamed: bundle:] a chargé la plume "BatteryAppViewController", mais la prise de vue n'a pas été définie.'

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

Modifier // Je connecter alerte à une nouvelle vue dans mon xib, toujours pas de chance

Répondre

2

Le problème est que les deux animations de base (celle de visualisation de la vue actuelle et celle d'affichage de l'alerte) se chevauchent. Vous devez séparer ces deux animation se déplace, en suivant cette solution de contournement:

  1. ont le code d'alerte soit en viewDidAppear, plutôt que viewWillAppear

  2. Appel [alert performSelector:@selector(show) withObject:nil afterDelay:0.0]. Cela garantit que l'alerte se produit après la fin de l'animation en cours.

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

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

Merci, erreur disparue, et alerte affiche ... mais 3 fois! Il s'affiche puis disparaît automatiquement. Il réapparaît alors, mais vous oblige à le rejeter avant d'apparaître une fois de plus! – Stumf

+0

Je suppose que vous appelez 'viewDidAppear:' explicitement plusieurs fois, ou que la méthode déléguée appelle accidentellement 'showHello'. Vous auriez besoin de montrer plus de code. – notnoop

+0

Spécifiquement quels domaines de code avez-vous besoin de voir? – Stumf

0

Essayez de mettre l'alerte dans viewDidAppear.

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

+0

Je l'ai fait comme vous l'avez dit, mais obtenez la même erreur – Stumf

0

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

0

Vous ne connectez pas d'UIAlerts dans Interface Builder. Les alertes n'ont pas de pointes 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 que vous n'avez aucune vue définie pour votre contrôleur de vue. Vous devez configurer cela dans Interface Builder.

Questions connexes