Ios 警告:正在进行时,试图在视图控制器上显示模态控制器

Ios 警告:正在进行时,试图在视图控制器上显示模态控制器,ios,objective-c,cocoa-touch,debugging,uiviewcontroller,Ios,Objective C,Cocoa Touch,Debugging,Uiviewcontroller,我知道这看起来像是重复的,但这并不是因为我发现的所有问题/帖子都与我无关,或者不起作用 这是我的。我的根视图控制器是一个HoldingViewController,具有左视图、主视图和右视图控制器。在我的主视图控制器中,在视图确实加载中,我有一个教程视图控制器,如果用户还没有看到教程,就会启动该控制器。关闭视图控制器时遇到的问题是警告:在演示过程中尝试打开演示 主视图控制器视图中的调用没有加载: if(![[NSUserDefaults standardUserDefaults] valueFo

我知道这看起来像是重复的,但这并不是因为我发现的所有问题/帖子都与我无关,或者不起作用

这是我的。我的根视图控制器是一个HoldingViewController,具有左视图、主视图和右视图控制器。在我的主视图控制器中,在视图确实加载中,我有一个教程视图控制器,如果用户还没有看到教程,就会启动该控制器。关闭视图控制器时遇到的问题是
警告:在演示过程中尝试打开演示

主视图控制器视图中的调用没有加载:

if(![[NSUserDefaults standardUserDefaults] valueForKey:@"hasSeenTutorial"])
{
    [[NSUserDefaults standardUserDefaults] synchronize];
    GRxTutorialViewController *grxTutorialViewController = [[GRxTutorialViewController alloc]
    initWithNibName:@"GRxTutorialViewController" bundle:[NSBundle mainBundle]];
    grxTutorialViewController.modalPresentationStyle = UIModalPresentationFullScreen;
    [self presentViewController:grxTutorialViewController animated:NO completion:nil];
}
在教程视图中,我创建了一个按钮来关闭此模式视图控制器。它是:

-(void)skipIntro
{
    NSLog(@"Skip pressed");
    [self dismissViewControllerAnimated:YES completion:nil];
}
我还尝试将HidingViewController的viewDidLoad放入其中,但它甚至没有显示,并且记录了以下消息:

警告:尝试显示其视图不在窗口层次结构中的对象


有没有人知道如何解决这个问题,或者我的问题是什么,我做错了什么?感谢您的帮助。提前谢谢

在HidingViewController的
ViewDidDisplay
方法中启动tutorial view controller可能会对您有所帮助

编辑以获取更多详细信息

只要保留一个布尔值,就可以避免循环。如果只想显示一次教程

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.tutorialShouldDisplay = YES;
}



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

    if (self.tutorialShouldDisplay && ![[NSUserDefaults standardUserDefaults] valueForKey:@"hasSeenTutorial"])
    {
        self.tutorialShouldDisplay = NO;
        /*
             should set NSUserDefaults properly for key @"hasSeenTutorial"
        */
        GRxTutorialViewController *grxTutorialViewController = [[GRxTutorialViewController alloc] initWithNibName:@"GRxTutorialViewController" bundle:[NSBundle mainBundle]];
        grxTutorialViewController.modalPresentationStyle = UIModalPresentationFullScreen;
        [self presentViewController:grxTutorialViewController animated:NO completion:nil];
    }
}
正如@hasan所说,您可以在AppDelegate中对rootViewController进行一些修改。然而,我认为这不适合你们的结构。
事实上,有很多解决方案,但你必须改变结构。如果你不想改变你的结构,这个解决方案应该是可行的

检查AppDelegate中的
[[NSUserDefaults standardUserDefaults]valueForKey:@“HassenTutorial”]
,并按如下方式更改根视图控制器:

GRxTutorialViewController *grxTutorialViewController = [[GRxTutorialViewController alloc]
    initWithNibName:@"GRxTutorialViewController" bundle:[NSBundle mainBundle]];

self.window.rootViewController = grxTutorialViewController;

在您的教程中,不要忽略它。改为显示HoldingViewController。

我刚试过,但没有。实际上,显示MainViewController几秒钟,然后显示TutorialViewController,但我仍然收到警告消息。准确地说,我没有正确回答。它应该在HidingViewController的ViewDidDisplay方法中。请你试试这个好吗?你确定这仍然会给你同样的警告吗?@hasan:这是错误消息
警告:尝试在不在窗口层次结构中的视图上显示@caglar成功了!如何使其显示在MainViewController之前?MainViewController显示几秒钟,然后显示教程视图控制器,我甚至有动画=否。我假设在某个时候,您将HassenTutorial值设置为true,并将其存储在nsuserdefaults中(在取消教程之前)?您能投票表决吗?:)在教程被取消后,我如何将其恢复到常规应用程序中?我在回答中提到不要取消教程。从教程视图中显示HoldingViewController。在AppDelegate中,检查用户默认值,然后决定哪个是根视图控制器。我来看看,看看这对我是否有效