ios - Swift - UserDefaults 设置未保存在框架内
问题描述
我有一个框架,它生成一次设备 UUID 并使用 UserDefaults 保存它。该应用程序可以访问 UserDefaults 并且一切都按预期工作。但是,在某些情况下,框架不会访问 UserDefaults。我在 iPhone 8 上使用 synchronize() 方法解决了这个问题:
func getDeviceID() -> String {
if let device = UserDefaults.standard.object(forKey: "DeviceID") as? String {
return device
} else {
let device = UUID().uuidString
UserDefaults.standard.set(device, forKey: "DeviceID")
UserDefaults.standard.synchronize() // this line helped with an iPhone 8
return device
}
}
但是,在较旧的第一代 iPhone SE 上,问题又回来了。首先,为什么会发生这种情况,为什么 synchronize() 方法似乎有助于更新设备?(两部手机都运行 iOS 13)从框架内访问 UserDefaults 时是否有任何已知限制?
解决方案
如果在将 deviceId 写入 UserDefaults 后立即读取数据时失败,则可能与 UserDefaults 实际将数据存储到磁盘的方式有关。
实际写入磁盘是异步的,并且由 NSUserDefaults 自动批处理。检查这个
因此,运行新 iOS 版本的旧设备可能会变慢。
推荐阅读
- matlab - matlab UDP/IP 连接问题(R2014a)
- arrays - (C) 使用 bsearch 在 struct 数组中按名称查找 struct
- amazon-web-services - 如何使用 VPN 限制对 S3 托管网站的访问
- javascript - 如何隐藏特定 apk 包中的内容并在其他设备和应用程序上显示?
- javascript - Firebase 存储多个图像数组 GetDownloadURL 我们如何解决呢?
- python - 将第二个条形图添加到烛台图但收到错误消息
- python - 在不终止命令行的情况下关闭 Discord bot 连接 (discord.py)
- wordpress - 如何在 wordpress 上导入模板
- javascript - 在 ES6 中将对象数组转换为多级嵌套结构
- java - 是否可以使用泛型来扩展具有泛型的类?