【发布时间】:2020-01-30 11:12:19
【问题描述】:
我有一个需要在本地保存值的框架,为此我选择了 UserDefaults。
但是,这些值永远不会保存,并且以下读取函数在重新启动应用后总是返回""
class Preferences {
let preferences : UserDefaults
init (preferences : UserDefaults) {
self.preferences = preferences
}
// Private Key
func savePrivateKey(key : String) {
writeString(value: key, key: privateKeyKey)
}
func readPrivateKey() -> String! {
return readString(key: privateKeyKey)
}
private func readString(key : String) -> String? {
if preferences.object(forKey: key) == nil {
return "bananas"
} else {
return preferences.string(forKey: key)
}
}
private func writeString(value : String, key : String) {
preferences.set(value, forKey: key)
}
fileprivate let privateKeyKey = "privateKey"
}
初始化为:
let preferences = Preferences(preferences: UserDefaults.standard)
我试过了:
- 模拟器和物理设备
- 调试和发布
- UserDefaults 和 SwiftyUserDefaults
奇怪的是,这是保存 Bool 值,而不是字符串值。
我认为这可能是由于没有正确使用UserDefaults,但SwiftyUserDefaults 得到了相同的结果。
【问题讨论】:
-
您是否尝试过显式同步? (即写完后打电话
preferences.synchronize()?你应该试一试。 -
是的,这已被弃用,
-synchronize is deprecated and will be marked with the NS_DEPRECATED macro in a future release. -
@CZ54 我以前见过,但不是在我想要 SDK 的默认值的情况下使用吗?就我而言,当 SDK 启动时,我们没有存储任何值,也没有默认值,所以我认为这不是方法
-
@Vanethos 您希望在您的应用程序和框架之间共享价值?
标签: ios swift userdefaults swiftyuserdefaults