Here is the pitch.
It is 2015 now and you probably don't need to use the UINavigationControllerDelegate methods as in the accepted answer. Just check carefully your code if you have any typo or copy/paste error.
I ran into an issue lately that viewDidAppear is no longer called after some copy/paste. After reading @Yar's answer, I did a search on viewDidAppear in my code and found that [super viewDidAppear:animated]; was mistakenly called in viewWillAppear:
-(void)viewWillAppear:(BOOL)animated
{
   [super viewDidAppear:animated];
   //...      ^^^ 
}
- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];
    // this is never called :(
}
Just share this finding here in case people run into same issue.