2017-07-27 92 views
3

我想永久存儲一個字符串,並使用全局數據在多個接口控制器上訪問它。這是我按下按鈕時設置字符串的代碼。全球數據與UserDefaults - 斯威夫特

下面所有的代碼都是在接口控制器1

UserDefaults.standard.set("yellow", forKey: "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) 

    } 

問題是字符串保存到temporaryVars.newBingoColor和我可以在界面控制器2上看到它,但是當我重新啓動程序時,temporaryVars.newBingoColor在界面控制器2上沒有打印出來。如果我試圖查看它在界面控制器1上雖然顯示正常?

這裏有什麼不正確?

+0

顯示您的代碼爲控制器2,因爲是有問題的 –

+0

您是否將您的userdefault設置爲空而您做restar T' –

+0

@ReinierMelian我在控制器2上的代碼只是'print(temporaryVars.newBingoColor)' –

回答

-1

在你的AppDelegate,這行代碼添加到applicationDidEnterBackground功能:

UserDefaults.standard.synchronize()

而且還添加相同的線路設置的關鍵是這樣後:

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

+0

synchronize()方法已被棄用,將被刪除 –

+0

您可以發佈源代碼,開發者網站不會這麼說。 – Timmy

+0

檢查UserDefaults.syncronize()方法聲明閱讀評論 –