2017-07-27 18 views
3

文字列を永続的に格納し、グローバルデータを使用して複数のインターフェイスコントローラにアクセスしたい。これは、ボタンを押したときに文字列を設定するコードです。UserDefaultsを使用したグローバルデータ - Swift

以下のすべてのコードは、インタフェース・コントローラ上にある1

UserDefaults.standard.set("yellow", forKey: "newBingoColor") 
このコードは、以下のコンテキストにアウェイクである

:問題が文字列temporaryVars.newBingoColorと私に保存されている

override func awake(withContext context: Any?) { 
    super.awake(withContext: context) 

    let newBingoColorObject = UserDefaults.standard.object(forKey: "newBingoColor") 

    if let newBingoColor = newBingoColorObject as? String { 

     temporaryVars.newBingoColor = newBingoColor as! String 

     print(newBingoColor) 
     print(temporaryVars.newBingoColor) 

    } 

インターフェイスコントローラ2で見ることができますが、プログラムを再起動すると、temporaryVars.newBingoColorはインターフェイスコントローラ2に何も表示されません。表示しようとするとインターフェイスコントローラ1上に表示されますが、問題ありませんか?

ここで間違っていますか?あなたのAppDelegateで

+0

コントローラー2のコードを問題のあるコードと同じように表示 –

+0

再構築中にユーザーのデフォルトを空に設定していますかt? –

+0

@ReinierMelianコントローラ2のコードは 'print(temporaryVars.newBingoColor)' –

答えて

-1

applicationDidEnterBackground関数にコード行を追加します。このようなキーを設定した後、同じ行を追加し、

UserDefaults.standard.synchronize()

も:

UserDefaults.standard.set("yellow", forKey: "newBingoColor") UserDefaults.standard.synchronize()

+0

synchronize()メソッドは廃止され、削除されます –

+0

ソースを投稿することはできますか?開発者のウェブサイトはそうは言いません。 – Timmy

+0

UserDefaults.syncronize()メソッドの宣言を確認してください。コメントを読んでください –

関連する問題