puedo porque llamadas llamada hacer fusionar enlazar conferencia como iphone sdk xib viewdidappear

iphone - porque - ¿Cómo puedo llamar a ViewDidAppear solo una vez?



no puedo fusionar llamadas iphone (3)

Puede intentar mover toda esa funcionalidad en el método viewDidLoad: lugar de viewDidAppear . Ese solo dispara una vez. A menos que haya una razón para que usted no ...

EDITAR: más código para mostrar lo que quiero decir en el comentario

en el archivo .h:

BOOL firstTime;

en el archivo .m:

-(void)viewDidLoad { NSLog(@"viewDidLoad actually fired"); //... firstTime = YES; } -(void)viewDidAppear { //... if(firstTime){ //show it firstTime = NO; } }

Cuando el usuario inicie la aplicación, quiero que muestre el archivo stockholm.xib y lo haga aquí:

-(void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; NSUserDefaults *startPage =[NSUserDefaults standardUserDefaults]; NSString *page =[startPage stringForKey:@"page"]; NSLog(page); if(page==nil) { //Do nothing } else if ([page isEqualToString:@"Default"]) { //Do nothing } else if ([page isEqualToString:@"Stockholm"]) { NSLog(@"going to Stockholm"); Stockholm *Start =[[Stockholm alloc]initWithNibName:nil bundle:nil]; [self presentModalViewController:Start animated:YES]; } else { NSLog(@"HAHA"); }

pero cuando el usuario cierra stockholm.xib usando:

[self dismissModalViewControllerAnimated:YES];

después de que finalice la animación, la aplicación se bloquea. y la razón es que, supongo, viewDidAppear llama dos veces y, por lo tanto, está intentando abrir el archivo xib cerrado recientemente.

ahora, ¿cómo puedo llamar a la vista apareció solo una vez? para que cuando el usuario regrese de Estocolmo no se llame a viewDidAppear? cualquier otra solución?

gracias :)


También puede usar GCD si su clase tiene un campo como:

@interface MyClass { dispatch_once_t once; } @end @interface MyClass { - (void)viewDidAppear:(BOOL)animated { dispatch_once(&once, ^{ // do business }); } @end


Puede agregar la propiedad como BOOL cargada a su viewcontroller, establecerla en false en viewdidload y luego hacer su método viewDidAppear como:

- (void)viewDidAppear:(BOOL)animated { if (!loaded) { //code } else { return; } loaded = YES; }

Funciona para mi.