0

私のアプリには、質問、mcqs の回答、および関連するスコアを含む UIViewController があります。

このコントローラーを他のコントローラーにプッシュしています。つまり、

QuestionViewController *questionController = [delegate getQuestionScreen];


    // If Iphone/iPod Touch
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
        // If iPhone 5 or new iPod Touch
        if([UIScreen mainScreen].bounds.size.height == 568){
            questionController = [[QuestionViewController alloc] initWithNibName:@"QuestionViewController" bundle:nil];

        } else{
            // Regular iPhone
            questionController = [[QuestionViewController alloc] initWithNibName:@"QuestionViewController_iPhone4" bundle:nil];

        }
    }


    questionController.modalPresentationStyle =  UIModalTransitionStyleCrossDissolve;

    [self.navigationController pushViewController:questionController animated:NO];

このコントローラーを使用しているときは、サイドメニュー (facebook など) を開き、新しいコントローラーの選択オプションを開きます。たとえば、HelpController...

 DemoViewController *demoController = [[DemoViewController alloc] initWithNibName:@"HelpViewController_iPhone4" bundle:nil];


        UINavigationController *navigationController = self.menuContainerViewController.centerViewController;
        NSArray *controllers = [NSArray arrayWithObject:demoController];
        navigationController.viewControllers = controllers;
        [self.menuContainerViewController setMenuState:MFSideMenuStateClosed];

QuestionViewController の前の画面に戻ると、そのコントローラーの新しいオブジェクトを作成する必要があります。その結果、すべての計算と古いデータが新しいものとして失われます。

古いコントローラーを保存して、それを再度ナビゲートしたり、その特定のステータスで再利用したりするにはどうすればよいですか。

質問に関して不明な点があれば、私に聞いてください......

4

1 に答える 1

1

これをしないでください:

    NSArray *controllers = [NSArray arrayWithObject:demoController];
    navigationController.viewControllers = controllers;

これは、現在のビューをすべて破棄するようナビゲーション コントローラーに要求するためです。

代わりに、新しいコントローラーを押してください。

何らかの理由で単にプッシュできない場合は、インスタンス変数 ( NSArray) を作成し、それを使用して格納してからnavigationController.viewControllers置き換えると、後で復元できます。

于 2013-07-17T07:08:11.040 に答える