2010-01-04 5 views
10

Я искал, но, к сожалению, не повезло.presentModalViewController in 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

ответ

13

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

Фиксированный просто используя ..

-(void)viewDidAppear:(BOOL)animated 
{ 

} 

вместо

-(void)viewDidLoad 
{ 

} 

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

/идиотизм

+5

но это создаст проблему, она будет звонить каждый раз, когда ваш почтовый видAppear ...!?! –

7

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

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

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

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

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

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

2

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

Смежные вопросы