0

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

这就是我所拥有的。我的根视图控制器是一个拥有左、主和右视图控制器的 HoldingViewController。在我的主视图控制器中,在视图中加载了一个教程视图控制器,如果用户还没有看到教程,我会启动它。我关闭视图控制器时遇到的问题是Warning: Attempt to present <TutorialViewController: 0xade1780> on <HoldingViewController: 0xaaaa500> while a presentation is in progress!

主视图控制器视图中的调用确实加载了:

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 并且它甚至不显示它并且记录了此消息:

Warning: Attempt to present <TutorialViewController: 0xaac0ed0> on <HidingViewController: 0xaabe8d0> whose view is not in the window hierarchy!

有谁知道如何解决问题或我的问题是什么以及我做错了什么?任何帮助表示赞赏。提前致谢!

4

2 回答 2

0

[[NSUserDefaults standardUserDefaults] valueForKey:@"hasSeenTutorial"]入您的 AppDelegate 并更改您的根视图控制器,如下所示:

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

self.window.rootViewController = grxTutorialViewController;

在您的教程中不要忽略它。改为呈现 HoldingViewController。

于 2013-11-05T21:07:04.977 回答
-1

在 HidingViewController 的viewDidAppear方法中启动教程视图控制器可能会对您有所帮助

编辑以获取更多详细信息

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

- (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 进行一些修改。但是,我认为不适合您的结构。实际上,有很多解决方案退出,但你必须改变结构。如果你不想改变你的结构,这个解决方案应该可以工作。

于 2013-11-05T19:06:45.143 回答