13

ストーリーボードを備えたXcode4.5を使用してアプリケーションを構築しました。アプリを初めて起動するときに、最初のView Controllerが、続行するために同意する必要のある契約条件とともに表示されるようにします。その後、アプリを起動して最初のView Controllerをスキップし、2番目のViewControllerに移動します。

NSUserDefaultsクラスと、次のような効果をもたらすものを使用する必要があることはわかっています:if([[NSUserDefaults standard ...] boolForKey:@ "iHaveAcceptedTheTerms"])

しかし、私はこれまでこのクラスを使用したことがなく、このコードを実装する方法がわかりません。誰かがこれを行う方法の詳細を共有できますか?

4

4 に答える 4

14

この質問を最新の状態に保つために、ここに受け入れられた回答のSwiftバージョンがあります。


ステップ1

App Delegateに、次の関数を追加します。

func applicationDidFinishLaunching(application: UIApplication) {
    if !NSUserDefaults.standardUserDefaults().boolForKey("TermsAccepted") {
        NSUserDefaults.standardUserDefaults().setBool(false, forKey: "TermsAccepted")
    }
} 

これが最初の起動である場合、これは基本的に、TermsAccepted Boolをfalseに設定します(Boolsはデフォルトでfalseであるため)。


ステップ2

ルートビューコントローラー(アプリの起動時に読み込まれるビューコントローラー)では、条件が受け入れられたかどうかを確認し、それに応じて動作する方法が必要です。

以下の関数を追加します。

override func viewDidAppear(animated: Bool) {
    if NSUserDefaults.standardUserDefaults().boolForKey("TermsAccepted") {
        // Terms have been accepted, proceed as normal
    } else {
        // Terms have not been accepted. Show terms (perhaps using performSegueWithIdentifier)
    }
}

ステップ3

ユーザーが条件に同意したら、TermsAcceptedBooltrueに変更します。したがって、条件の受け入れを処理するメソッドの本文に、次の行を追加します。

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "TermsAccepted")

これがお役に立てば幸いです。

Loic

于 2015-07-13T15:02:37.170 に答える
10

AppDelegateに入力します。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

//first-time ever defaults check and set
if([[NSUserDefaults standardUserDefaults] boolForKey:@"TermsAccepted"]!=YES)
{
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"TermsAccepted"];
}

次に、rootViewControllerに契約条件とそれを受け入れる方法を実装します。たとえば、次のように、条件が受け入れられているかどうかを確認する必要があります。

if ([[NSUserDefaults standardUserDefaults] boolForKey:@"TermsAccepted"]){
    //proceed with app normally
}
else{
//show terms
}

受け入れられると、次のコードがデフォルト設定を変更します。

 if(termsaccepted){
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"TermsAccepted"];
}
于 2012-10-14T00:15:52.020 に答える
5

Swift3バージョン

AppDelegate.swiftの場合:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    if !UserDefaults.standard.bool(forKey: "Walkthrough") {
        UserDefaults.standard.set(false, forKey: "Walkthrough")
    }
}

ルートビューコントローラの場合:

override func viewDidLoad() {
    super.viewDidLoad()
    if UserDefaults.standard.bool(forKey: "Walkthrough") {
        // Terms have been accepted, proceed as normal            
    } else {
        // Terms have not been accepted. Show terms (perhaps using 
    }
}

条件が受け入れられたとき、またはチュートリアルのウォークスルーが終了したとき:

UserDefaults.standard.set(true, forKey: "Walkthrough")
于 2016-11-22T23:17:24.893 に答える
4

最初のビューまたはデリゲートでは、次のようになります。

NSUserDefaults * standardUserDefaults = [NSUserDefaults standardUserDefaults];

BOOL isAccepted = [standardUserDefaults boolForKey:@"iHaveAcceptedTheTerms"];

if (!isAccepted) {
    [self presentViewController:YOUR_TERMS_CONTROLLER animated:YES completion:nil];
} else {
    [self.navigationController pushViewController:YOUR_NORMAL_CONTROLLER animated:YES];
}

用語コントローラーにユーザーの応答を保存することを忘れないでください。

[standardUserDefaults setBool:YES forKey:@"iHaveAcceptedTheTerms"];
于 2012-10-14T00:14:38.030 に答える