Apple TV Swift中UserDefaults存储AccessToken重启后丢失问题
UserDefaults存储Token重启后丢失的排查方案
移除过时的
synchronize()调用
iOS 10之后synchronize()已被标记为过时,系统会自动处理UserDefaults的持久化操作。强制调用该方法可能反而干扰系统的同步逻辑,直接删除UserDefaults.standard.synchronize()这行代码即可。同时注意:UserDefaults的读写操作必须在主线程执行,跨线程操作会导致数据丢失或不一致。验证存储的Token有效性
写入前先确认accessToken不是nil或空字符串,避免存储无效数据:guard let validToken = accessToken, !validToken.isEmpty else { print("Token无效,未执行存储") return } UserDefaults.standard.set(validToken, forKey: "apiToken")改用类型安全的读取方式
value(forKey:)返回的是Any?,类型转换容易出问题,换成对应类型的读取方法更可靠:let apiToken = UserDefaults.standard.string(forKey: "apiToken")排查沙盒异常
如果是模拟器测试,尝试重置模拟器(Hardware > Erase All Content and Settings)后重新测试;如果是真机,卸载重装应用,排除应用沙盒被系统异常重置的情况。检查系统版本兼容性
部分老旧iOS版本存在UserDefaults持久化的已知bug,确保设备运行的是iOS 12及以上版本,避免版本兼容问题导致数据丢失。
内容的提问来源于stack exchange,提问作者Pavnesh Singh
相关产品推荐
相关产品推荐

