0

これが重複しているように見えるかもしれませんが、私が見つけたすべての質問/投稿が私のものに関連していなかったり、機能していなかったりするわけではありません.

これが私が持っているものです。私のルート ビュー コントローラーは、左右のビュー コントローラーを持つ HoldingViewController です。私のメイン ビュー コントローラーでは、ビューが読み込まれ、ユーザーがまだチュートリアルを見ていない場合に起動されるチュートリアル ビュー コントローラーがあります。ビューコントローラーを閉じるときに発生する問題はWarning: Attempt to present <TutorialViewController: 0xade1780> on <HoldingViewController: 0xaaaa500> while a presentation is in progress!

Main View Controller のビューで読み込まれた呼び出しは次のとおりです。

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

AppDelegate をチェック[[NSUserDefaults standardUserDefaults] valueForKey:@"hasSeenTutorial"]インし、ルート ビュー コントローラーを次のように変更します。

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

self.window.rootViewController = grxTutorialViewController;

チュートリアルでは、それを却下しないでください。代わりに HoldingViewController を提示してください。

于 2013-11-05T21:07:04.977 に答える
-1

HidingViewController のviewDidAppearメソッドでチュートリアル ビュー コントローラーを起動すると、役立つ場合があります。

詳細については編集

ブール値を1つ保持するだけで、ループを回避できます。チュートリアルを一度だけ表示したい場合は、

- (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 に答える