0

ストーリーボードを使用する xcode のプロジェクトがあります。ロードされる最初のビューは、ユーザーが同意ボタンをクリックして続行する必要がある「条件に同意する」ビューです。クリックすると、次のビューに移動します。ユーザーがプログラムの最初の起動時に同意をクリックした後、そのビューを二度と表示したくありません。次のビューに直接移動したいのです。いくつかのコードがありますが、機能していません。これが私が正確に持っているものです:

アプリデリゲート内: (applicationDidFinishLaunchingWithOptions 内)

if([[NSUserDefaults standardUserDefaults] boolForKey:@"TermsAccepted"]!=YES)
{
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"TermsAccepted"];
}

Accept Terms and Conditions ビューの実装内: (viewDidLoad)

 if ([[NSUserDefaults standardUserDefaults] boolForKey:@"TermsAccepted"]){
    [self.navigationController pushViewController: self animated:YES];
    //I want it to go to the next screen
}
    else {
        //I want to show this screen, but I don't know what goes here
}

また、Accept Terms and Conditions ビューの実装内 (Accept ボタン内)

 - (IBAction)acceptButton:(id)sender {
 [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"TermsAccepted"];
}

実行すると、「同じView Controllerインスタンスを複数回プッシュすることはサポートされていません」というエラーが表示されます。これを修正するにはどうすればよいですか?

4

2 に答える 2

1
  1. 最初のコード スニペットでは、基本的に「TermsAccepted が YES でない場合 (つまり NO)、NO に設定します。これは意味がありません。
  2. 2 番目のコード スニペットでは、次のように記述しました[self.navigationController pushViewController:self animated:YES];。したがって、基本的には、現在のUIViewController( self) にそれ自体を独自の navigationController にプッシュするように要求しますが、これも意味がありません。

そのため、このエラーが発生します。現在のviewControllerをpushしようとしてselfいますが、navigationControllerですでに画面に表示されています。selfしたがって、同じインスタンス ( ) を同じ navigationController で 2 回プッシュしようとします。

明らかに、現在のviewController自体ではなく、別のviewController(おそらくTermsAndConditionViewControllerアプリの利用規約を示すまたは何かのインスタンス)をプッシュするつもりでしたが、これは意味がありません。

于 2012-10-14T16:24:21.803 に答える
0

まず、常に表示したい次のビュー コントローラーをウィンドウのルート ビュー コントローラーにする必要があります。そのコントローラーの viewDidLoad メソッドで、if 句を配置して、同意条件コントローラーを表示します。presentModalViewController を使用して表示できます。if クラスは次のようになります。

If([[NSUserDefaults standardUserDefaults] BoolForKey:@"TermsAccepted"] !=YES) {
    // instantiate your terms and conditions controller here
    // present the controller
}

次に、利用規約コントローラーを閉じるメソッドで、そのキーの値を YES に設定します。

于 2012-10-14T20:46:14.160 に答える