2013-02-20 5 views
7

Próbuję przedstawić UITableView, które już zrobiłem dla użytkowników, aby umieścić dane i zapisać w analizie składni. Jestem prawie pewien, że nie przedstawiam widoku nawigacji.Czy prezentujesz podczas prezentacji? Próba wyświetlenia nowego widoku po zalogowaniu się na Facebooku za pomocą funkcji analizy składni.

Kiedy zalogować, pojawia się błąd:

Checklists[4516:c07] Warning: Attempt to present <ChecklistsViewController: 0x10525e90> 
on <UINavigationController: 0x9648270> while a presentation is in progress! 

Dzięki za pomoc.

#import "LoginViewController.h" 
#import "ChecklistsViewController.h" 
#import "SetupViewController.h" 
#import <Parse/Parse.h> 

@interface LoginViewController() 

@end 

@implementation LoginViewController 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     // Custom initialization 
    } 
    return self; 
} 

- (void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 

    PFLogInViewController *login = [[PFLogInViewController alloc] init]; 
    login.fields = PFLogInFieldsFacebook; 
    // Need to set the delegate to be this controller. 
    login.delegate = self; 
    login.signUpController.delegate = self; //signUpController is a property on the login view controller 
    [self presentModalViewController:login animated:NO]; 

} 

    - (void)logInViewController:(PFLogInViewController *)logInController didLogInUser:(PFUser *)user 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
    NSLog(@"Successfully logged in."); 
    ChecklistsViewController *controller = [[ChecklistsViewController alloc] initWithStyle:UITableViewStylePlain]; 
    controller.modalTransitionStyle = UITableViewStylePlain; 
    [self presentModalViewController:controller animated:YES]; 

} 

Odpowiedz

34

Metoda ta została zaniechana na dobre podczas

 presentModalViewController:animated: 

należy użyć zamiast tego

presentViewController:animated:completion: 

samo dotyczy tego

dismissModalViewControllerAnimated: 

Teraz możemy wykorzystać ten

dismissViewControllerAnimated:completion: 

Kiedy nie chcemy bloku zakończenia, po prostu ustawiamy go na zero.

Ale w twoim przypadku blok ukończenia może naprawić twój problem ... zapewnia prawidłową sekwencję zdarzeń, tj. Prezentacja nie odbędzie się, dopóki nie zostanie zakończona.

- (void)logInViewController:(PFLogInViewController *)logInController 
        didLogInUser:(PFUser *)user 
{ 
    [self dismissViewControllerAnimated:YES completion:^{ 
     NSLog(@"Successfully logged in."); 
     ChecklistsViewController *controller = 
       [[ChecklistsViewController alloc] initWithStyle:UITableViewStylePlain]; 
     controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
     [self presentViewController:controller animated:YES completion:nil]; 
    }]; 

} 

[NB - modalTransitionStyle było nieprawidłowe w oryginalnym kodzie, ja się zmieniły, że również. Dzięki Daniel G za wskazanie tego]

+0

Dzięki! Bardzo dokładny. Jeśli nie masz nic przeciwko, mam jeden inny błąd, który pojawił się po wdrożeniu twojego rozwiązania. "Ostrzeżenie: Próba zaprezentowania na którego widok nie znajduje się w hierarchii okien!" Nie widziałem tego. – STANGMMX

+0

@STANGMMX - Potrzebuję więcej informacji na temat Twojej aplikacji - do czego miałby się odnosić "UINavigationController" (lub podklasa)? Być może podnieść inne pytanie pokazujące nieco więcej informacji, takich jak twój storyboard, wszelkie inne wskazówki. Chociaż jedną rzeczą, którą należy wypróbować, może być przeniesienie kodu poza viewDidAppear - masz zdezorientowaną sytuację, gdy viewDidAppear jest wywoływany za każdym razem, gdy odrzucasz ekran logowania. Lub utwórz flagę BOOL, aby upewnić się, że nie próbujesz ponownie przedstawić swojego loginu zaraz po zwolnieniu. – foundry

Powiązane problemy