2017-05-29 10 views
0

私は音楽を再生するためのユーザーデフォルトブールを持っています。初めて起動すると私のUser Defaults boolは、アプリの最初の起動時に設定されないのはなぜですか?

が、私はこれがviewDidAppearである

if launchedBefore { 

     // Do nothing. 

    } else { 

     UserDefaults.standard.set(true, forKey: "musicOn") 
     print("music is \(musicOn)") 
     UserDefaults.standard.set(true, forKey: "alreadylaunched") 

    } 

...このように、trueにブール値を設定しよう()。

問題は、最初の起動時にtrueに設定されていないことです.boolを設定した場所に関係なく、launchBeforeチェックがなくても最初に設定されません。

これはなぜ機能しないのでしょうか? musicOnは最初の打ち上げ時に常にfalseに等しいですが、2回目の打ち上げ時には本当ですか?

洞察力があれば幸いです。ありがとう!

+0

のようなメソッドを使用する必要があります。あなたは正しいキーを見ていますか? – Leo

+0

ちょっとレオ!私の鍵を二重にチェックしたところ、すべて同じだったが、すべて小文字に変更したが、うまくいかなかった。返信いただきありがとうございます! – Khoury

+1

'launchBefore'を設定したコードを表示できますか? – Paulw11

答えて

0

私にとっては、var musicOnをユーザーのデフォルトのboolに再度一致させることができました。ヴァールmusicOnはすでに任意の関数の外側でインスタンス化された

if launchedBefore { 

     // Do nothing. 

    } else { 

     UserDefaults.standard.set(true, forKey: "musicon") 
     print("music is \(UserDefaults.standard.bool(forKey: "musicon"))") 

     musicOn = UserDefaults.standard.bool(forKey: "musicon") // Stating it again works to update the bool. 

     UserDefaults.standard.set(true, forKey: "alreadylaunched") 

    } 

は、それだけで再設定する必要がありそうです。

ご意見ありがとうございます。

+0

ユーザーデフォルトの値を変数に設定するという動作を期待するのはなぜですか? – Paulw11

+0

私は、変数がユーザーのデフォルトと同じで、viewDidAppear()の早い段階で更新されているので、使用されるまでに値が更新されていると思いました。ルーキーエラー! – Khoury

0

あなたはあなたが私の知る限りUserdefaultsは大文字と小文字が区別され理解し、キー「musicOn」と「alreadylaunched」を使用しているこの

let launchedBefore = UserDefaults.standard.bool(forKey: "alreadylaunched") 
     if launchedBefore { 

     // Do nothing. 

    } else { 

     UserDefaults.standard.set(true, forKey: "musicOn") 
    // print("music is \(musicOn)") 
     UserDefaults.standard.set(true, forKey: "alreadylaunched") 

    } 
関連する問題