2015-09-27 3 views
8

Sto provando ad aggiungere un UIAlertController alla mia app ma non appare affatto. Ho provato il seguente:UIAlertController non appare per nulla

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Message" message:@"Web Service is not available." preferredStyle:UIAlertControllerStyleAlert]; 

UIAlertAction* ok = [UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:nil]; 
[alertController addAction:ok]; 

[self presentViewController:alertController animated:YES completion:nil]; 

ma questo non sembra affatto, cosa sto facendo di sbagliato?

+0

Questo codice dovrebbe funzionare correttamente. Puoi mostrarci il resto del contesto in cui appare questo frammento? – JaredH

+0

Il codice che hai pubblicato sembra funzionare correttamente. Che aspetto ha il tuo metodo che stai usando per mostrare questo avviso? Viene chiamato quel metodo? – Adrian

+0

Stai cercando di presentare questo controller di allerta fuori dal thread principale? Lo stai anche presentando da un controller di visualizzazione? Stai riscontrando errori? – JAL

risposta

19

Nel controller di visualizzazione iniziale di uno storyboard, questo deve essere in viewDidAppear:. In caso contrario, se utilizzato in un XIB, mostrerà anche un avviso in viewWillAppear e viewDidLoad.

mi sono imbattuto il codice nel modello Visualizzazione singola applicazione sia in iOS 8 e 9, mettere il vostro codice nel data ViewController, nei seguenti callback del ciclo di vedere la vita:

  • viewDidAppear - riuscirono
  • viewWillAppear - nessun avviso mostrato; ha generato questo output nella console: Avviso: tentativo di presentare su cui vista non è nella gerarchia della finestra!
  • viewDidLoad - nessun avviso mostrato; risultato in questo output nella console: il tentativo di caricare la vista di un controller di vista mentre è deallocating non è consentito e può comportare un comportamento indefinito().
+0

Perché dovresti voler presentare un controller di allerta in viewDidLoad? Cosa succede se stai caricando una vista ma non la stai presentando? – JAL

+0

Per rispondere alla prima domanda, è possibile che si desideri visualizzare un avviso non appena viene visualizzata una vista. Tuttavia, stavo semplicemente menzionando questo, nel caso in cui il codice di Magna fosse in 'viewDidLoad'. Ho appena provato a inserire il suo codice all'interno di un metodo 'viewDidLoad' in iOS 9 con uno Storyboard (il modello di applicazione Visualizzazione singola), e ho ricevuto un errore: il tentativo di caricare la vista di un controller di visualizzazione mentre è deallocating non è consentito e potrebbe risultato in comportamento non definito (). Espanderò la mia risposta con qualche spiegazione. – Sheamus

+0

viewDidLoad non viene chiamato non appena viene visualizzata la vista. Quello sarebbe viewWillAppear. E sì, non avrebbe senso presentare un controller di vista su una vista mentre sta caricando. – JAL

0
- (void)showMessage:(BOOL)animated { 

UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"Do not leave any Field Empty" message:nil preferredStyle:UIAlertControllerStyleAlert]; 

[alertController addAction:[UIAlertAction actionWithTitle:@"OK" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action) { 
    [self dismissViewControllerAnimated:YES completion:nil]; 
}]]; 
[self present:alertController animated:YES completion:nil]; 

}

dove io chiamo questo metodo

 [self showMessage:YES]; 

funziona bene può qualcuno ottenere benefici.