2016-12-27 7 views
0

Я столкнулся с чем-то, чего я никогда не видел. Сценарий выглядит следующим образом. В моем первоначальном VC есть кнопка регистрации, которая при нажатии вызывает несколько отдельных контроллеров представлений, связанных с процедурой регистрации (я запрашиваю учетные данные пользователя и, если требуется сервером, запрашиваю код подтверждения). Когда этот процесс будет завершен, я сохраняю пользовательский объект в NSUserDefaults, который понадобится позже. Затем снова указывается начальный ВК.ViewController не выполняет segue программно

В принципе, я уверен, что я в основном потоке и что пользовательский объект сохраняется. Если эти условия будут выполнены, я затем нажимаю основную часть приложения.

Вот соответствующий код, все мои журналы отображаются в окне вывода, но segue не происходит.

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.complete = false; 
    if([NSThread isMainThread]){ 
     NSLog(@"Main Thread-Yes"); 
     if ([[NSUserDefaults standardUserDefaults] objectForKey:@"CUSTOMOBJECT"]) { 
      NSLog(@"Will begin pushToAuthenticate"); 
      [self pushAuthenticateController]; 
     } 
    } else { 
     NSLog(@"Main Thread-No"); 
    } 
} 

- (void)pushAuthenticateController{ 
    [self performSegueWithIdentifier:@"pushMainVC" sender:self]; 
} 

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    if ([segue.identifier isEqualToString:@"pushMainVC"]) { 
     NSLog(@"PrepareForSegue-pushMainVC"); 
     [segue.destinationViewController.navigationItem setHidesBackButton:YES]; 
     [segue.destinationViewController.navigationItem setTitle:@"MainVC"]; 
    } 
} 

В раскадровке у меня есть SEGUE, который соединяет начальный VC с MainVC, идентификатор для этого Segue соответствует «pushMainVC», и если я закрыть и снова открыть приложение (после поступления) имеет место в перетекает. Вывод консоли для обоих случаях (перегрузочные начальный VC после регистрации и закрытия и повторного открытия приложения), являются следующие:

APPNAME [4106: 1628238] Главная тема-да

APPNAME [4106: 1628238] Начнутся pushToAuthenticate

APPNAME [4106: 1628238] PrepareForSegue-pushMainVC

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

+0

NSUserDefault не сохраняет пользовательские объекты подкласса NSObject, насколько я знаю –

+0

вы пробовали нажать segue в 'viewWillAppear' вместо' viewDidLoad'? – dirtydanee

+0

Возможный дубликат [Выполнить Segue on ViewDidLoad] (http://stackoverflow.com/questions/8221787/perform-segue-on-viewdidload) – dirtydanee

ответ

1

Вы пытаетесь выполнить push-сегу от viewDidLoad. Но вы не можете этого сделать, потому что это слишком рано; viewDidLoad означает, что вид есть но есть еще нет в интерфейсе. Вам нужно подождать, пока не появится интерфейс, поэтому вам нужно что-то оттолкнуть.

+0

Могу ли я представить его Modal из viewDidLoad? –

+1

Нет, это слишком рано! Интерфейса пока нет. – matt

0

Вы не можете попытаться загрузить его с самого хранилища. так:

pushMainVC* pushMainV = [self.storyboard instantiateViewControllerWithIdentifier:NSStringFromClass([pushMainVC class])]; 

    [self.navigationController pushViewController:pushMainV animated:YES]; 

ВНИМАНИЕ: Не забудьте дать свой ViewController раскадровки ID.

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