2010-01-04 17 views
10

Ho cercato in giro ma purtroppo non ho avuto fortuna.presentModalViewController in viewDidLoad al primo avvio

La mia app richiede all'utente di accedere/registrarsi la prima volta che lancia l'app. So come determinare il primo avvio (usando NSUserDefaults) ma ogni volta che provo a presentare la modale contenente i controlli di accesso/registrazione, non succede nulla.

Ecco quello che ho:

-(void)viewDidLoad { 
    [self showLogin]; 
    [super viewDidLoad]; 
} 

-(void)showLogin {  
    FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"AccountView" bundle:nil]; 
    controller.delegate = self; 

    controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
    [self presentModalViewController:controller animated:YES]; 

    [controller release]; 
} 

Tuttavia, non succede nulla. La vista principale viene caricata normalmente. Qualsiasi aiuto è molto apprezzato.

-Giles

risposta

13

[UPDATE]

fisso semplicemente utilizzando ..

-(void)viewDidAppear:(BOOL)animated 
{ 

} 

invece di

-(void)viewDidLoad 
{ 

} 

Grazie comunque!

/idiozia

+5

ma creerà problema, chiama ogni volta che la tua mail mostraAppare ...!?! –

7

Ho avuto lo stesso problema e finito per usare viewDidAppear pure. L'unico problema con l'approccio viewDidAppear è che se carichi altri UIViewControllers in cima, quindi reshow la base, il codice di installazione viene chiamato ripetutamente. Alla fine ho dovuto aggiungere un valore booleano (inizializzato a SÌ) a questo controller di visualizzazione e controllare quel valore prima di decidere cosa fare. Spero che questo aiuta qualcuno ...

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:(BOOL)animated]; 

    if(justLaunched) 
    { 
     justLaunched = NO; 
     if(settingsFileExists) 
     { 
      [self displayMainView]; 
     } 
     else 
     { 
      [self displaySetupView]; 
     } 
    } 
} 
0

e invocando questo nel viewDidLoad non è molto sicuro: la sequenza viewDidLoad/viewDidUnload può verificarsi in fase di esecuzione quando l'iPhone ha bisogno di liberare alcuni punti di vista, al fine di ottenere indietro alcuni gratuiti memoria.

L'effetto collaterale di tale sequenza sarebbe che il controller di accesso sarebbe stato mostrato ...

Come ha detto il viewDidAppear un aspetto migliore, ma non semplicemente metterlo alla fine del appDidFinishedLaunching delegato della vostra UIApplication?

2

Come utilizzare performSelector: withObject: afterDelay nella funzione viewDidLoad? È così che lo faccio, con un breve ritardo di 0,1 secondi.

Problemi correlati