アプリからすべてのUserDefaults
データを削除するには、次のコードを使用します。
let domain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: domain)
print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count)
しかし、私は印刷ラインから10
を得ました。 0
であってはいけませんか?
問題は、UserDefaultsの内容を消去した直後に印刷しているのに、手動で同期していないことです。
let domain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: domain)
UserDefaults.standard.synchronize()
print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count)
これでうまくいくはずです。
システムは定期的にuserDefaultsを自動的に同期するため、通常は手動でsynchronize
を呼び出す必要はありませんが、変更をすぐにプッシュする必要がある場合は、synchronize
呼び出しを介して強制的に更新する必要があります。
このメソッドは定期的な間隔で自動的に呼び出されるため、自動同期を待つことができない場合(たとえば、アプリケーションが終了しようとしている場合)、またはユーザーのデフォルトをディスク上にあるものに更新する場合にのみ、このメソッドを使用してください変更を加えていません。
この回答はここにあります https://stackoverflow.com/a/6797133/563381 ですが、ここではちょうどSwiftにあります。
func resetDefaults() {
let defaults = UserDefaults.standard
let dictionary = defaults.dictionaryRepresentation()
dictionary.keys.forEach { key in
defaults.removeObject(forKey: key)
}
}