同步设置 UserDefaults 中的值

问题描述

我正在尝试快速在 UserDefault 中保存布尔值。 所以当我在 userDefault 中设置值时,我的下一个指令是切换到视图控制器并关闭当前视图控制器。

所以,现在发生的事情是,有时 userDefault 会将值保存在 DB 中,有时则不会。 我阅读了 Apple 的文档 https://developer.apple.com/documentation/foundation/userdefaults 并发现

在运行时,您可以使用 UserDefaults 对象从用户数据库中读取您的应用使用的认值。 UserDefaults 缓存信息以避免每次需要认值时都必须打开用户数据库。当您设置认值时,它会在您的进程内同步更改,并异步更改为持久存储和其他进程。

所以,我猜是因为在下一行我打开了一个新的控制器并关闭了当前的控制器,因此存在不一致。

这是我的代码

func setWalkthroughShown(completionHandler: @escaping ()->()) {
        UserDefaults.standard.set(true,forKey: isWalkthroughCompleted)
        UserDefaults.standard.synchronize()
        completionHandler()
    }

我什至调用了 UserDefaults.standard.synchronize() 以便操作可能变得同步。 即使在文档中明确写明不使用此功能。 有人可以指导我哪里出错了吗?如何在关闭当前进程之前保存所有位置?

这是我用来检索价值的函数

func isWalkthroughShown() -> Bool {
        return UserDefaults.standard.bool(forKey: isWalkthroughCompleted)
    }

这里 isWalkthroughCompleted 是一个字符串,你可以看到我使用相同的字符串来保存和检索值

解决方法

实际上,编码没有语法错误。

我实际上以错误的方式对其进行了测试。 在提交在 userdefaults 中保存数据的请求后,我立即重新编译并作为异步值存储,所以有时由于进程终止,我遇到了这个问题。 感谢@matt。 详情iOS UserDefaults falls behind saved content