2017-05-29 12 views
0

我有一個用戶默認布爾音樂播放。爲什麼我的用戶默認布爾沒有在第一次啓動應用時設置?

當首次推出,我嘗試將布爾設置爲true,像這樣...

if launchedBefore { 

     // Do nothing. 

    } else { 

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

    } 

這是在viewDidAppear()。

問題是它在第一次啓動時沒有設置爲true,無論我在哪裏設置bool,它可能沒有launchBefore檢查,它仍然沒有在第一次設置。

我不明白爲什麼這不起作用? musicOn在首次發佈時總是等於false,然後在第二次發佈時,這是真的嗎?

任何有識之士將不勝感激。謝謝!

+0

您正在使用的鍵「musicOn」和「alreadylaunched」,據我瞭解Userdefaults是區分大小寫的。你在看正確的鑰匙? – Leo

+0

嘿,獅子座!雙重檢查了我的鑰匙,他們都是一樣的,但我確實把它們全部改爲小寫,但那不起作用。謝謝回覆! – Khoury

+1

你可以在你設置'launchBefore'的地方顯示代碼嗎? – Paulw11

回答

0

對我來說有效的是讓var musicOn再次等於用戶默認的bool。

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") 

    } 

瓦爾musicOn已經被實例化的任何功能外,似乎它只是需要重新設置。

感謝您的意見!

+0

你爲什麼期望在用戶默認值中設置一個值來影響一個變量? – Paulw11

+0

我認爲,因爲變量等於用戶默認值,並且它在viewDidAppear()中提前更新,所以我假定它的使用時間已經更新。菜鳥錯誤! – Khoury

0

您應該使用的方法類似這樣的

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") 

    } 
相關問題