PresentModalViewController в viewDidLoad при первом запуске

Я искал, но, к сожалению, не повезло.

Мое приложение требует от пользователя входа/регистрации в первый раз, когда он или она запускает приложение. Я знаю, как определить первый запуск (используя NSUserDefaults), но всякий раз, когда я пытаюсь представить модальный элемент, содержащий элементы входа/регистрации, ничего не происходит.

Вот что у меня есть:

-(void)viewDidLoad {
    [self showLogin];
    [super viewDidLoad];
}

-(void)showLogin {    
    FlipsideViewController *controller = [[FlipsideViewController alloc] initWithNibName:@"AccountView" bundle:nil];
    controller.delegate = self;

    controller.modalTransitionStyle = UIModalTransitionStyleCoverVertical;
    [self presentModalViewController:controller animated:YES];

    [controller release];
}

Однако ничего не происходит. Основной вид просто загружается как обычно. Любая помощь приветствуется.

-Giles

Ответ 1

[ОБНОВЛЕНИЕ]

Исправлено просто с помощью.

-(void)viewDidAppear:(BOOL)animated 
{

}

вместо

-(void)viewDidLoad
{

}

Спасибо в любом случае!

/идиотизм

Ответ 2

У меня была та же проблема, и я также использовал viewDidAppear. Единственная проблема с подходом viewDidAppear заключается в том, что если вы загружаете другие UIViewControllers сверху, то перескажите базу, затем ваш код настройки вызывается снова и снова. Мне пришлось добавить логическое значение (инициализированное YES) к этому контроллеру представления и проверить это значение, прежде чем принимать решение о том, что делать. Надеюсь, это поможет кому-то...

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

    if(justLaunched)
    {
        justLaunched = NO;
        if(settingsFileExists)
        {
            [self displayMainView];
        }
        else
        {
            [self displaySetupView];
        }
    }
}

Ответ 3

Как насчет использования performSelector: withObject: afterDelay в функции viewDidLoad? То, как я это делаю, с небольшой задержкой 0,1 с.

Ответ 4

И вызывать это в viewDidLoad не очень безопасно: последовательность viewDidLoad/ viewDidUnload может возникать во время выполнения, когда iPhone должен освободить некоторые представления, чтобы вернуть некоторую свободную память.

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

Как вы сказали, viewDidAppear выглядит лучше, но не просто помещает его в конец appDidFinishedLaunching делегата вашего UIApplication?