2017-01-02 21 views
4

我有動態密鑰生成來構建我的數據庫,所以我需要能夠找到用戶生成的所有密鑰,如果我想做一個完整的刪除。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) 
} 

回答

0

絕不是這是最漂亮的解決方案,但它應該完成工作。我可以確認dictionaryRepresentation()是最接近你會得到。它確實包含了你所有的密鑰,不幸的是它包含了所有其他的東西。

如果您在示例中命名了所有的鍵,您可以這樣做,因爲它們都包含下劃線。

for key in Array(UserDefaults.standard.dictionaryRepresentation().keys) { 

    if key.element.contains("_") { 
     UserDefaults.standard.removeObject(forKey: key.element) 
    } 

} 

或者如果_將無法​​正常工作我想你可以檢查是否包含鍵或taskTimelastRefresh

+0

謝謝隊友,我找到了一個類似的解決方案。對於在開發過程中創建的手機還有一些「浮動」數據仍然不滿意。希望有一個刪除所有方法 –

相關問題