2

В то время как я двигаюсь от PassCode Контролера OTP ViewController, РМКО получаю следующее сообщение об ошибке в консоли:IOS которого вид не в окне иерархии

Предупреждение: Попытка представить < OTPController: 0x1e56e0a0> на < PassCodeController: 0x1ec3e000> чей вид не находится в иерархии окон!

Это код, я использую для переключения между видами:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    OTPViewController *lOTPViewController = [storyboard instantiateViewControllerWithIdentifier:@"OTPViewController"]; 
    lOTPViewController.comingFromReg = true; 

    [self presentViewController:lOTPViewController animated:YES 
        completion:nil]; 

Я представляю PassCode контроллер От RegistrationViewController:

UIStoryboard* storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
     PassCodeViewController *passVC = [storyboard instantiateViewControllerWithIdentifier:@"PassCodeViewController"]; 
     [self presentViewController:passVC animated:YES completion:nil]; 
+0

, где вы представить ** PassCodeController ** –

+0

UIStoryboard * раскадровки = [UIStoryboard storyboardWithName: @ "Main" пачке: ноль]; использовать self.storyboard вместо –

+0

AppDelegate * appDelegate = (AppDelegate *) [[UIApplication sharedApplication] delegate]; appDelegate.window.rootViewcontroller присутствует ... –

ответ

2

Это произошло из-за двух viewcontroller присутствует и увольняется одновременно, или вы пытаетесь сразу же просмотреть ViewController в диспетчере view г открыть ViewDidload метод так

Первое:

  • Present ViewController от viewDidAppear метода или вместо ViewDidload.

Второе:

я предлагаю использовать метод завершения для настоящего и освобождает viewcontrolelr как следующий пример:

[self presentViewController:lOTPViewController animated:YES 
          completion:^{ 

     }]; 

ОБНОВЛЕНИЕ:

создать отдельный метод представления OTPViewController, например:

-(void)PresentOTPViewController 
{ 

    UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
    OTPViewController *lOTPViewController = [storyboard instantiateViewControllerWithIdentifier:@"OTPViewController"]; 
    lOTPViewController.comingFromReg = true; 

    [self presentViewController:lOTPViewController animated:YES 
        completion:^{}]; 

} 

Теперь этот метод вызывается с 1 второй Delaya с использованием performSelector

[self performSelector:@selector(PresentOTPViewController) withObject:self afterDelay:1.0 ]; 

Вам нужно поставить выше performselect код в

[self dismissViewControllerAnimated:YES completion:^{ 
[self performSelector:@selector(PresentOTPViewController) withObject:self afterDelay:1.0 ]; 
}]; // this is the dismiss method of PassCodeViewController 

т

+0

Yah thats проблема otp vc уволен, и вы сразу же представляете новый vc, так что добавьте 1-2 секунды задержки между увольнением и новым vc present –

+0

Я на обед теперь обновит ответ в течение 15 месяцев –

+0

Отредактируйте ваш вопрос и добавьте otp уволен code plz –

2

пытаются представить его из RootViewController,

[self.view.window.rootViewController presentViewController:lOTPViewController animated:YES completion:nil];

+0

@ Vijay .... скажите мне шаг за шагом процесс – Priya

+0

@ Vijay ..... проверьте его с обновленным вопросом ... http: //stackoverflow.com/q/ 37110406/6285383 – Priya

+0

вместо ключевого слова 'self' для представления ваших контроллеров представлений попробуйте использовать' self.view.window.rootViewController'. Используйте этот код, где вы столкнулись с этой ошибкой! – Vijay

1

Использование ниже строки кода ..

// you need to create UIStoryboard object by giving name of your storyboard 
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
// here you need to create storyboard ID of perticular view where you need to navigate your app 
UIViewController *vc = [mainStoryboard instantiateViewControllerWithIdentifier:@"viewContIdentifire"]; 

// if use presentViewController this will not enables you to go back to previous view 
[self presentViewController:vc animated:NO completion:nil]; 
         **// OR** 
// using pushViewController lets you to go back to the previous view 
[self.navigationController pushViewController:vc animated:YES]; 
+0

@vaibhav .... Pushing Working Для меня ... спасибо – Priya

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