![](/img/trans.png)
[英]Where to place the .register() method to set an initial/default value for UserDefaults?
[英]set value in UserDefaults synchronously
我正在嘗試將 boolean 保存在 swift 的 UserDefault 中。 因此,當我在 userDefault 中設置值時,我的下一條指令是切換到查看 controller 並關閉當前視圖 controller。
所以,現在發生的事情是,有時 userDefault 將值保存在 DB 中,有時則沒有。 我從 Apple https://developer.apple.com/documentation/foundation/userdefaults閱讀了文檔,發現
在運行時,您可以使用 UserDefaults 對象從用戶的默認數據庫中讀取您的應用使用的默認值。 UserDefaults 緩存信息以避免每次需要默認值時都必須打開用戶的默認數據庫。 當您設置默認值時,它會在您的進程中同步更改,並異步更改為持久存儲和其他進程。
所以,我猜是因為在下一行我打開了一個新的 controller 並關閉了當前的,因此存在不一致。
這是我的代碼
func setWalkthroughShown(completionHandler: @escaping ()->()) {
UserDefaults.standard.set(true, forKey: isWalkthroughCompleted)
UserDefaults.standard.synchronize()
completionHandler()
}
我什至調用了 UserDefaults.standard.synchronize() 以便操作可以變得同步。 即使在文檔中明確寫到不要使用這個 function。 有人可以指導我哪里錯了嗎? 在關閉當前進程之前,如何在所有地方保存?
這是我正在檢索值的 function
func isWalkthroughShown() -> Bool {
return UserDefaults.standard.bool(forKey: isWalkthroughCompleted)
}
這里 isWalkthroughCompleted 是一個字符串,您可以看到我使用相同的字符串來保存和檢索值
實際上,編碼中沒有語法錯誤。
我實際上是以錯誤的方式測試它。 在提交了在 userdefaults 中保存數據的請求后,我立即重新編譯,並且作為異步值存儲,所以有時由於進程被終止,我遇到了這個問題。 感謝@matt。 有關詳細信息iOS UserDefaults 落后於保存的內容
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.