我知道UserDefaults只是爲了保存偏好,但這些偏好是持久的 - 保存在UserDefaults中的值是通過無限數量的應用程序啓動維護的,只要應用程序保持安裝狀態,就可以隨時讀取它們。對?UserDefaults.standard值可能無法讀取嗎?
這些值可能會被清除,或者在任何時候都無法正確訪問嗎?經過多年使用UserDefaults並根據它們所保持的值的一致性,我現在在工作的一天中看到過兩次,當我的應用程序啓動並檢查了一個簡單的布爾值時,該值不正確。
if defaults.bool(forKey: "beenLaunched") {
每次啓動應用程序時都會運行此代碼。如果這個值是真的,我什麼也不做,但如果它是假的,我設置一些值,因爲這是用戶第一次啓動應用程序,然後我調用defaults.set(true,forKey:「beenLaunched」)和defaults.set(0,forKey:「eventsCompleted」)和其他一些值。
我發現this thread on the Apple forums其中Eskimo說:「對於中央的NSUserDefaults方法,-objectForKey:,nil的結果意味着該值不可用,但是沒有辦法區分這個鍵不存在,並且此值可以'因爲用戶的默認值是離線的,所以不會被提取。「 (這似乎是參考background launching while a device is locked的具體情況)
我可以考慮一種更安全的方式來保存諸如Bool值,Int或String之類的簡單數據,但使用UserDefaults來處理這些類型的價值觀一直是簡單,直接和可靠的。任何人都可以在這件事上留言,如果我錯誤地相信UserDefaults的持久性?
謝謝!
在設置值之後是否調用了'NSUserDefaults :: synchronize()'? – Brandon
17年來一直使用Cocoa框架,這不是它的工作原理。 :-)沒有麻煩閱讀該線程,但沒有,它永遠不會「脫機」(甚至不知道這是什麼意思*)。 –
@Brandon不,我通常不會同步,但從來沒有問題 – RanLearns