Swift3 - 如何找到Foundation.UserDefaults中的所有密钥,以便我可以删除我的所有数据
问题描述:
我有动态密钥生成来构建我的数据库,所以我需要能够找到用户生成的所有密钥,如果我想做一个完整的删除。Swift3 - 如何找到Foundation.UserDefaults中的所有密钥,以便我可以删除我的所有数据
func deleteAllData(){
let userDefaults = Foundation.UserDefaults.standard
let keys = userDefaults.dictionaryRepresentation()
for key in keys {
print(key)
userDefaults.removeObject(forKey: String(describing: key))
}
}
所以我不正确的解释,因为我抓住这里的键包含系统信息,如AppleLocale,PKKeychainVersionKey和AppleKeyboards。
我注意到了UserDefaults中的一些函数,例如removeSuite,removeVolatileDomain和removePersistentDomain。有没有更好的方法来构建我的数据,这样我就可以使用这些方法,或者如果我知道要传递什么参数,我可以使用它们。
// How I've been setting my data
userDefaults.set(taskTime, forKey: "\(taskName)_taskTime")
userDefaults.set(lastRefresh, forKey: "\(taskName)_lastRefresh")
//Swift2.x delete-all method
for key in Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys) {
NSUserDefaults.standardUserDefaults().removeObjectForKey(key)
}
答
绝不是这是最漂亮的解决方案,但它应该完成工作。我可以确认dictionaryRepresentation()
是最接近你会得到。它确实包含了你所有的密钥,不幸的是它包含了所有其他的东西。
如果您在示例中命名了所有的键,您可以这样做,因为它们都包含下划线。
for key in Array(UserDefaults.standard.dictionaryRepresentation().keys) {
if key.element.contains("_") {
UserDefaults.standard.removeObject(forKey: key.element)
}
}
或者如果_
将无法正常工作我想你可以检查是否包含键或taskTime
lastRefresh
。
谢谢队友,我找到了一个类似的解决方案。对于在开发过程中创建的手机还有一些“浮动”数据仍然不满意。希望有一个删除所有方法 –