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