2017-04-09 32 views
-1

我有下面的代碼,我想在我的遊戲開始時只有一次播放教程,所以我有一個布爾變量設置爲true,一旦教程已經完成,但由於某些原因,值停留爲假。我甚至已經打印出教程的價值,即使之前的行是將值設置爲true的行,它也會顯示爲false。它爲什麼這樣做?如何在Swift中的User Defaults中設置布爾值?

let tutorial = UserDefaults().bool(forKey: "tutorial") 


if tutorial == false { 
     introSequence() 
} 

if rightIntroButton.contains(location) { 
    UserDefaults().set(true, forKey: "tutorial")              
    //tutorial = true 
    UserDefaults.standard.set(true, forKey: "tutorial") 
    print(tutorial)            
} 
+0

嘗試在設置密鑰後調用'UserDefaults.standard.synchronize()'。 –

+0

https://developer.apple.com/reference/foundation/nsuserdefaults/1408905-setbool?language=objc – danh

+1

什麼是搞砸的縮進?順便說一下,將用戶默認密鑰('「tutorial」')提取到一個集中變量中可能不是一個壞主意,那麼讓您更容易在將來更改它們。 – Alexander

回答

1

我有一個布爾變量設置後的教程 已經完成,成爲真正的但某些原因值保持爲假。

西婭的原因是:在每次創建新的對象訪問UserDefaults(UserDefaults()),而不是時間,你應該使用standard辛格爾頓對象:

返回共享默認對象。

因此,將UserDefaults()替換爲UserDefaults.standard

+0

我試過這樣做,但即使在將UserDefaults()更改爲UserDefaults.standard之後,tutorial變量仍然被打印爲false。 –

+0

然後,我鼓勵你調試你的代碼,添加一些斷點,並檢查'tutorial'的值是否已被編輯。 –