簡體   English   中英

在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM