2011-09-27 14 views
6

Bir kullanıcı bir düğmeyi tıklattığında önceki görünümü görüntülemek için aşağıdaki kodu kullanıyorumpopviewcontroller viewWillappear'ı çağırmıyor

[self.navigationController popViewControllerAnimated:YES]; 

Önceki görünümde, viewWillAppear'ı başlangıçta birkaç şeyin üzerine yazdım. Ancak, viewWillAppear çağrılmıyor gibi görünüyor. NSLog'u viewDidload'a yerleştirdim, viewWillAppear, viewDidAppear ve yalnızca viewDidAppear çağrılıyor. Bu normal davranış mı? Varsa, hangi olayı geçersiz kılmalıyım? Böylece başlatmamı yapabilir miyim? Teşekkür ederim.

İstenirse -viewWillAppear bir önceki görünüm için

- (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]; 

} 

Aşağıdaki kod kullanılarak UINavigationalController uygulamasını uygulama temsilcisine kurarım

- (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

Bilmiyorum Ne oldu ama dün gece simülatörde bir kez daha uygulamayı çalıştırmaya çalıştıktan sonra ve hala bu sorunu yaşıyorsa, her şeyi kurtarmaya karar verdim ve geç kaldığımdan beri bilgisayarımı kapatmaya karar verdim.

Bu sabah bilgisayarımı tekrar xcode açtım, projeyi temizledim ve kurup çalıştırdım ve sorun giderildi ve -viewWillAppear çağrıldı. Ben hiçbir şeyi ve çalışmasını değiştirmedim. NSLog'u -willShowView'a ekledim ve çağrılmadım. Aniden bir manzaranın neden arandığını bilmiyorum.

+0

Sadece meraktan, el ile -viewWillAppear'ı aramayı denediniz mi? – Ricky

+0

viewWillAppear'ı nasıl el ile çağırabilirim? Ben [self.navigationController popViewControllerAnimated: YES] aradığım görünümden çağrı mı? dan? – atbebtg

+0

Yep - ideali ''popViewControllerAnimated:' – Ricky

cevap

8

navigasyon kontrolörün temsilci belirlendiğinden emin olun ve daha sonra kimin viewWillAppear aramak istediğiniz sınıfta viewWillAppear aramak için bu işlevi kullanın:

- (void)navigationController:(UINavigationController *)navigationController 
     willShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    [self viewWillAppear:animated]; 
} 
+0

kodu op ekleyeceğim ve willShowViewcontroller çağrılmıyor. – atbebtg

+0

, gezinme denetleyicisinin temsilci kümesi mi? Bu sınıfın başlığında var mı? –

+0

evet, hem önceki görünümde hem de popViewController çağıran görünümü ve her iki yerde de çağrılmadığı görünümünde denedim – atbebtg

4

Sadece çok aynı sorun isabet ettik ve sonra Bazı testler popViewControllerAnimated çağrıldığını keşfetti: bir blokta (AFNetworking'te bir ağ yanıtından) viewDidAppear ana görünümde çağrılmaz. Burada benim için çalışan çözüm, bunun yerine ana iş parçacığı olarak adlandırmaktı.

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]; 
});