【问题标题】:Retrieve only the keys & values which I stored in UserDefaults仅检索我存储在 UserDefaults 中的键和值
【发布时间】:2021-01-01 09:35:28
【问题描述】:

我已经用套件创建了 UserDefaults,

self.moviesWatchedUserDefaults = UserDefaults(suiteName: "com.apple.tv.2020")

并将信息存储在 plist 中,例如

self.moviesWatchedUserDefaults.set(data, forKey: key).

现在,在检索时,我想检索所有键和值。我正在使用的,

var watchedList = self.moviesWatchedUserDefaults?.dictionaryRepresentation()

但返回的列表不仅包含我存储的项目,还包含其他键,如NSLanguagesAppleKeyboardsAppleKeyboardsExpandedCarCapabilities 等,

如何检索所有键和值(仅我存储的那些)?

【问题讨论】:

    标签: ios swift nsuserdefaults userdefaults


    【解决方案1】:

    如果您有完整的已知键列表,则可以过滤字典。

    在以下示例中,我将所有已知的键都放在一个枚举中,我可以过滤字典,只保留我的键:

    enum UserDefaultsKey: String, CaseIterable {
        case foo
        case bar
        case baz
    }
    
    let userDefaults = UserDefaults.standard
    userDefaults.set(42, forKey: UserDefaultsKey.foo.rawValue)
    
    let onlyMyValues = userDefaults.dictionaryRepresentation().filter { (key, _) -> Bool in
        UserDefaultsKey.allCases.map { $0.rawValue }.contains(key)
    }
    
    print(onlyMyValues) // prints ["foo": 42]
    

    【讨论】:

    • 不,这些就像从后端接收的未知密钥。
    • 在这种情况下,我建议两个选项: 1. 跟踪您用来保存到 UserDefaults 中的密钥并将它们存储起来以供以后检索。 2.采用更合适的存储方式,如自定义plist文件或数据库。 CoreData 可能是一个不错的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 2022-06-11
    • 2012-06-18
    • 1970-01-01
    相关资源
    最近更新 更多