прошивкой, чье мнение не в окне иерархии


В то время как я перемещаюсь с контроллера паролей на OTP ViewController, я получаю следующую ошибку в консоли:

Предупреждение: попытка представить on чье представление не находится в иерархии окон!

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

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

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

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

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

3 ответа:

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

Первый:

  • присутствует ViewController из метода viewDidAppear или вместо метода ViewDidload.

Второе:

Я предлагаю использовать метод завершения для present и dismiss 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

T

Попробуйте представить его из rootViewController,

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

Используйте следующую строку кода ..

// 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];