2013-09-27 9 views
10

Sto avendo difficoltà a far eseguire performSegueWithIdentifier. continuo a ricevereperformSegueWithIdentifier produce nessun seguito con errore identificatore

"Receiver (<UINavigationController: 0x1e59a9d0>) has no segue with 
identifier 'identA'" 

Quello che ho fatto è che:

  1. Passo: ha creato una singola applicazione vista e ha aggiunto un'etichetta - "A View Controller" al controller della vista.
  2. Passaggio: trascinato e rilasciato un altro controller di visualizzazione e aggiunto un'etichetta - "Visualizza controller B" al nuovo controller di visualizzazione.
  3. Passo: Scegli View Controller A ed eseguito Editor-> embed in-> controller di navigazione
  4. Passo: cablato View Controller A View Controller B con segue spinta con Identifier "IDENTA" Ti piace questa: wiring the seque

  5. Passo: aggiunta una chiamata a performSegueWithIdentifier sul ViewDidLoad del controller View A. Come questo:


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.navigationController performSegueWithIdentifier:@"identA" sender:self]; 
    // Do any additional setup after loading the view, typically from a nib. 
} 

Che cosa ho fatto di sbagliato ???

+3

Senza guardare nulla su cui controllare, credo che dovresti chiamare '[self performSegue ...]' piuttosto che '[self.navigationController perfo ...] ' – erdekhayser

+0

Yep U right .... – Yony

+0

A volte sono le cose semplici che non pensiamo di – erdekhayser

risposta

26

Si sta chiamando performSegueWithIdentifier:sender: su self.navigationController ma si imposta la segue sul View controller A:

cablata View Controller A View Controller B con spinta segue con Identifier "IDENTA"

Provare a sostituire:

[self.navigationController performSegueWithIdentifier:@"identA" sender:self]; 

con

[self performSegueWithIdentifier:@"identA" sender:self]; 
+1

Ma come si popViewController quando si esegue questa operazione? – hitme

+0

@stefanB, quale sarebbe l'equivalente di swift 2.0? this: self.performSegueWithIdentifier ("loginView", mittente: self); – alex

4

Solo un altro suggerimento (che mi ha salvato oggi) ...

ho scritto molti iPad & applicazioni per iPhone prima, utilizzando le pagine master-detail, Controller di Navigazione, ecc, ma oggi, sono stato perplesso , poiché la mia semplice app per iPhone a due schermi in XCode 5.1 si è rifiutata di passare da una schermata all'altra, all'interno di un UINavigationController.

È un altro di quei insani bug XCode che non aveva senso. Potrei anche creare un nuovo progetto XCode , e lì, lo stesso segue funzionerebbe perfettamente.

[self performSegueWithIdentifier:@"segueTest" sender:nil]; 

Alla fine, ho scoperto la causa.

Avevo creato un progetto vuoto in XCode, aggiunto manualmente uno Storyboard al mio progetto, ma mi mancava un passaggio.

Quando aggiungi uno storyboard da solo, devi anche andare nel tuo file .plist e aggiungere manualmente una linea che dica alla tua app il nome dello storyboard principale.

enter image description here

Se non si esegue questa operazione, stranamente, la vostra applicazione sarà costruire con successo, è sarà corsa, probabilmente otterrete il vostro primo schermo da visualizzare con successo ... ma poi le cose (come trovare i nomi dei successivi) inizieranno a sbagliare.

(Sigh.)

Spero che questo aiuta altre vittime XCode.

Ho bisogno di una birra ...

0

Ok. Un po 'di una situazione particolare qui, ma nella mia situazione ho avuto un UISplitViewController impostato in un nuovo progetto. Volevo eseguire un seguito nel controller della vista di dettaglio dopo aver premuto una cella nella visualizzazione della tabella principale. Quindi, in didSelectRowAtIndexPath: della tabella master ho eseguito

[[NSNotificationCenter defaultCenter]postNotificationName:@"userDetails" 
                  object:nil]; 

e nella visualizzazione dettagliata in viewDidLoad: ho aggiunto l'osservatore e il metodo di istanza

[[NSNotificationCenter defaultCenter]addObserver:self 
             selector:@selector(userDetailsShow) 
              name:@"userDetails" 
              object:nil]; 
-(void)userDetailsShow{ 
    [self performSegueWithIdentifier:@"userDetails" sender:nil]; 
} 

Quando si preme il cellulare nella vista maestro sarebbe sparare il metodo ma non fare nulla Si è verificato il problema: enter image description here

Avevo lasciato il passaggio predefinito tra la cella di visualizzazione tabella principale e il controller di navigazione dettagli attivo. In questo caso non ne avevo bisogno, quindi ero in grado di cancellarlo. Una volta cancellato, ha funzionato perfettamente, come dovrebbe.
Spero di riuscire a rimettere i capelli in ...