ios - UserDefaults 在框架中使用时不保存
问题描述
我有一个需要在本地保存值的框架,为此我选择了 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
得到了相同的结果。
解决方案
import Foundation
public class AppDefaults {
private let defaultStringKey = "DefaultString"
}
public extension AppDefaults {
var defaultString: String? {
get { return UserDefaults.standard.string(forKey: defaultStringKey) }
set { UserDefaults.standard.set(newValue?.description, forKey: defaultStringKey) }
}
}
我建议您制作一个名为 AppDefaults 等的单独文件。然后您可以访问每个默认值
var text = AppDefaults().defaultString
然后你可以覆盖它,它会自动保存使用
AppDefaults().defaultString = "Bananas"
推荐阅读
- search - 在 Sitefinity 后端动态模块搜索中搜索标题以外的字段
- c# - NSwag 变更控制器说明
- gatsby - 生产 Gatsby 博客未在 MDX 文件中呈现 TailwindCSS 类
- javascript - 如何从两个/三个文件中获取差异并将它们组合到节点中?
- python - Pandas:使用混合数据类型对多级列进行排序
- javascript - 使用 != 和 not-in 查询会在 firestore 中使用 Query.where 引发错误
- php - 执行使用 reffrer url 打开的文件
- ruby - 如何显示所有最新或待处理的 rake taks?
- jolt - 需要 JOLT 规范将源 JSON 格式转换为所需的 JSON 格式
- mapbox - 根据数据字段对 mapbox studio poi 图标进行排序