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) 
    } 

} 

或者如果_将无法​​正常工作我想你可以检查是否包含键或taskTimelastRefresh

+0

谢谢队友,我找到了一个类似的解决方案。对于在开发过程中创建的手机还有一些“浮动”数据仍然不满意。希望有一个删除所有方法 –