Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

popviewcontroller is not calling viewWillappear

I'm using the following code to display the previous view when a user is clicking on a button

[self.navigationController popViewControllerAnimated:YES];

In the previous view, I overwrite viewWillAppear to initialized few things. However, it seems like viewWillAppear is not being called. I put NSLog in viewDidload, viewWillAppear, viewDidAppear and only viewDidAppear is being called. Is this normal behavior? If yes, what event should I override so I can do my initialization? Thank you.

As requested -viewWillAppear for the previous view

- (void)viewWillAppear:(BOOL)animated{

    NSLog(@"ViewWillAppear");
        //[[GameStore defaultStore] resetGame];
        [self setHangmanImage];

    NSLog([[[GameStore defaultStore] selectedList] label]);
        [labelListName setText:[NSString stringWithFormat:@"List Name: %@", [[[GameStore defaultStore] selectedList] label]]];
        [labelCurrentIndex setHidden:YES];
        [labelCurrentWord setHidden:YES];
        [[self navigationController] setNavigationBarHidden:NO];

        [FlurryAnalytics logEvent:@"GameViewController - viewWillAppear"];

        [self getNewQuestion];

    NSLog(@"ViewWillAppear finish");
    [super viewWillAppear:YES];

}

I setup the UINavigationalController in the app delegate using the following code

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    HomeViewController *hv = [[HomeViewController alloc] init];

    UINavigationController *navController = [[UINavigationController alloc]
                                             initWithRootViewController:hv];

    // You can now release the itemsViewController here,
    // UINavigationController will retain it
    [hv release];

    // Place navigation controller's view in the window hierarchy
    [[self window] setRootViewController:navController];


    [navController release];


    // Override point for customization after application launch.
    [self.window makeKeyAndVisible];
    return YES;
}

UPDATE

I don't know what happened but last night after trying to run the app one more time in the simulator and its still having this issue, I decided to save everything and shut my computer down since it was getting late.

This morning I turned my computer back on opened up xcode, clean the project and build and run it and I the problem is fixed and -viewWillAppear is called. I didn't change anything and its working. I added NSLog in -willShowView and its not getting called. I don't know why all of a sudden viewWillAppear is being called.

like image 664
atbebtg Avatar asked Sep 27 '11 05:09

atbebtg


1 Answers

I've just hit a problem very much the same and after some testing discovered that calling popViewControllerAnimated: in a block (from a network response in AFNetworking) viewDidAppear isn't called in the parent view. The solution that worked for me here was to call it in the main thread instead.

dispatch_async(dispatch_get_main_queue(), ^{
    // If not called on the main thread then the UI doesn't invoke the parent view's viewDidAppear
    [self.navigationController popViewControllerAnimated:YES];
});
like image 172
Seoras Avatar answered Oct 09 '22 05:10

Seoras