Представление модального контроллера представления при загрузке другого ViewController - PullRequest
4 голосов
/ 20 июня 2011

Прежде чем пользователь сможет использовать мое приложение, он должен войти в систему. После того, как он вошел в систему, база данных создается, потому что мне нужна информация с сервера для ее построения.

Поэтому мой корневой ViewController - это LoginViewController, который модально представляет фактическое приложение (стек Navigation Controller) при успешном входе в систему.

Если пользователь уже вошел в систему при запуске приложения (я сохраняю учетные данные с NSUserDefaults), LoginViewController должен немедленно представить приложение. Поэтому я переписал метод:

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

    NSInteger userId = [[NSUserDefaults standardUserDefaults] integerForKey:@"selfUser"];
    if (userId != 0) {
        //[self performSelector:@selector(presentMainViewController) withObject:nil afterDelay:2];
        [self presentMainViewController];
    }
}
- (void)presentMainViewController {
    mainViewController = [[MainViewController alloc] init];
    mainViewController.managedObjectContext = managedObjectContext;
    navigationController = [[UINavigationController alloc] initWithRootViewController:mainViewController];
    navigationController.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
    [self presentModalViewController:navigationController animated:NO];
}

[self presentMainViewController]; выполняется, но контроллер не отображается. Если я использую строку выше, это работает.

Где я должен поместить код, чтобы он работал?

Ответы [ 2 ]

4 голосов
/ 21 июня 2011

Стек представления может быть создан не полностью при отправке viewDidAppear.Поэтому вы должны использовать perfomSelector:withDelay, чтобы поставить в очередь вызов в цикле выполнения.Таким образом, вы можете гарантировать, что стек представлений будет собран при выполнении кода.

Cheers!

0 голосов
/ 20 июня 2011

У меня была похожая ситуация, и я решил ее, переместив код в viewWillAppear (вместо viewDidAppear).Возможно, стоит попробовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...