私は、アプリからすべての UserDefaults
データを削除するためにこのコードを持っています:
let domain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: domain)
print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count)
しかし、print行から10
が表示されました。0`であるべきではないでしょうか?
問題は、UserDefaultsの内容をクリアした直後にプリントしているのに、手動で同期していないことです。
let domain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: domain)
UserDefaults.standard.synchronize()
print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count)
これなら大丈夫でしょう。
通常、手動で synchronize
を呼び出す必要はありません。システムは定期的に userDefaults を自動的に同期させますが、変更をすぐにプッシュする必要がある場合は、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)
}
}