Bagaimana cara menghapus semua data UserDefaults? - Swift

Saya memiliki kode ini untuk menghapus semua data UserDefaults dari aplikasi:

let domain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: domain)

print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count)

Tetapi saya mendapatkan 10 dari baris cetak. Bukankah seharusnya 0?

Larutan

Masalahnya adalah anda mencetak konten UserDefaults, tepat setelah membersihkannya, tetapi anda tidak menyinkronkannya secara manual.

let domain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: domain)
UserDefaults.standard.synchronize()
print(Array(UserDefaults.standard.dictionaryRepresentation().keys).count)

Ini seharusnya bisa dilakukan.

Sekarang Anda biasanya tidak perlu memanggil sinkronisasi secara manual, karena sistem secara periodik menyinkronkan userDefaults secara otomatis, tetapi jika Anda perlu mendorong perubahan dengan segera, maka Anda perlu memaksa pembaruan melalui panggilan sinkronisasi.

Dokumentasi menyatakan hal ini

Karena metode ini secara otomatis dipanggil pada interval periodik, gunakan metode ini hanya jika Anda tidak dapat menunggu sinkronisasi otomatis (misalnya, jika aplikasi Anda akan keluar) atau jika Anda ingin memperbarui default pengguna ke apa yang ada di disk meskipun Anda belum membuat perubahan apa pun.

Komentar (10)

Jawaban ini ditemukan di sini https://stackoverflow.com/a/6797133/563381 tetapi untuk berjaga-jaga di sini dalam bahasa Swift.

func resetDefaults() {
    let defaults = UserDefaults.standard
    let dictionary = defaults.dictionaryRepresentation()
    dictionary.keys.forEach { key in
        defaults.removeObject(forKey: key)
    }
}
Komentar (6)