How can I call the ViewDidAppear only one time?

hafhadg3 picture hafhadg3 · Feb 14, 2010 · Viewed 10.4k times · Source

When the user start the app I want it show the stockholm.xib and It does here:

-(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");

}

but when user closes the stockholm.xib using:

[self dismissModalViewControllerAnimated:YES];

after the animation is done, the app crashes. and the reason is, I guess, viewDidAppear calls twice and therefore it is trying to open the recently closed xib file.

now, how Can I call the view did appear only once? so that when the user comes back from Stockholm the viewDidAppear wont be called? any other solution?

thanx :)

Answer

Dimitris picture Dimitris · Feb 14, 2010

You can try moving all that functionality in the viewDidLoad: method instead of the viewDidAppear. That one only fires once. Unless there is a reason for you not to...?

EDIT: more code to show what i mean in the comment

in the .h file:

BOOL firstTime;

in the .m file:

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