2017-01-02 10 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などのシステム情報が含まれているので、だから私は右の辞書にはありませんよ。

私は、removeSuite、removeVolatileDomain、removePersistentDomainなどのUserDefaultsの機能に気付きました。これらのメソッドを使用できるようにデータを構造化する方が良い方法はありますか、引数として渡すものが分かっていれば既に使用できますか?

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

} 

それとも_場合

は、私は鍵が taskTimeまたは lastRefreshが含まれている場合、あなたがチェックすることができると思います動作しません。

+0

ありがとう、私は似たような解決策を見つけました。まだ開発中に作成されていた電話に保存された「浮動」データがあることは不幸です。すべてのメソッドを削除したい –

関連する問題