Domanda

Sto tentando di mostrare una vista di avviso non appena appare la vista (senza usare un pulsante). In viewcontroller.m ho:

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

    [alert show];

    [alert release];
}

e in viewcontroller.h ho:

IBOutlet UIView *alert; 

Non ho fatto nulla al mio file .xib.

Quando eseguito sul simulatore ottengo quanto segue in console:

30/11/2009 23: 41: 36.079 BatteryApp [867: 20b] *** App di terminazione a causa dell'eccezione non rilevata 'NSInternalInconsistencyException', motivo: '- [UIViewController _loadViewFromNibNamed: bundle:] ha caricato il " BatteryAppViewController " pennino ma la presa di visualizzazione non era impostata. "

Qualche idea in cui ho sbagliato, qualcosa a che fare con il mio xib?

Modifica // Collego l'avviso a una nuova vista nel mio xib, ancora senza fortuna

È stato utile?

Soluzione

Il problema è che le due animazioni principali (quella per visualizzare la vista corrente e quella per mostrare l'avviso) si sovrappongono. È necessario separare queste due mosse di animazione, seguendo questa soluzione alternativa:

  1. Il codice di avviso deve essere in viewDidAppear , piuttosto che viewWillAppear

  2. Chiama [alert performSelector: @selector (show) conObject: zero afterDelay: 0.0] . Ciò garantisce che l'avviso si verifichi al termine dell'animazione corrente.

Potrebbe essere necessario stare ancora attenti a rilasciare alert . Se fossi in te, avrei un metodo separato (ad esempio showHelloAlert), e quindi lo chiamerei da viewDidAppear:

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

Altri suggerimenti

Prova a mettere l'avviso in viewDidAppear.

Inoltre, a cosa serve l'iboutlet? Prova a togliere tutto.

Apri il tuo file xib in Interface Builder e controlla il trascinamento dal proprietario del file (che dovrebbe essere di classe BatteryAppViewController ) alla tua vista (non l'avviso) e seleziona la vista dal menu che si apre . Il registro indica che non hai effettuato questa connessione outlet.

Non connetti UIAlerts in Interface Builder. Gli avvisi non hanno pennini personalizzabili, quindi non è possibile caricarli nel generatore di interfaccia. Devi rimuovere:

IBOutlet UIView *alert;

... completamente.

Il messaggio di errore indica che non è stata definita alcuna vista per il controller della vista. È necessario configurarlo in Interface Builder.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top