Jawaban:
Swift 3.0.0
Jawaban di bawah ini tidak lagi menjadi masalah ketika saya menguji ini. Ketika diatur ke nil
hasilnya adalah NSCFData disimpan. Mungkin referensi objek NSNull, tapi saya tidak yakin.
Untuk sepenuhnya menghapus nilai penggunaan kunci UserDefaults.standard.removeObject(forKey: "YourDefault")
Saya menguji dengan kode berikut:
UserDefaults.standard.set(["a", "b", "c"], forKey: "MyDefaults")
print("Test A: My saved defaults \(UserDefaults.standard.object(forKey: "MyDefaults"))")
UserDefaults.standard.set(nil, forKey: "MyDefaults")
print("Test B: My defaults set to nil \(UserDefaults.standard.object(forKey: "MyDefaults"))")
UserDefaults.standard.removeObject(forKey: "MyDefaults")
print("Test C: My defaults removed \(UserDefaults.standard.object(forKey: "MyDefaults"))")
Ya, kedua baris kode itu setara, keduanya akan menghasilkan pembacaan nihil
id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"example key"];
NSUserDefaults
akan mengembalikan nol jika kunci tidak ditemukan. Saya akan merekomendasikan untuk menggunakanremoveObjectForKey
alih alih menyetelnya ke nol.
berikut adalah cara menguji apakah menyetel nilai kunci ke nil menghapus entri kunci dari NSUserDefaults standardUserDefaults
.
NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] copy];
for(NSString *key in keys) {
NSLog(@"Key Name: %@", key);
}
[keys release];
atau cukup buang kamus kunci / nilai NSUserDefaults standardUserDefaults
NSLog(@"All contents of NSUserDefaults: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
removeObjectForKey
?
setObject:nil
juga akan menghapus objek, bukan hanya kuncinya. Jadi, kedua fungsi tersebut menyebabkan hasil yang persis sama. Selain itu, jika Anda menghapus (atau mengatur ke nihil) satu-satunya objek yang disimpan (dan kunci), seluruh file .plist akan dihapus.
Swift 5.0 + iOS 11 dan yang lebih baru
Kedua metode tersebut menghapus nilainya. Mencoba ini di taman bermain:
import Foundation
let key = "Test"
let value = "test"
let defaults = UserDefaults.standard
func printUD() {
print("UserDefaults after modification:\n")
defaults.dictionaryRepresentation().forEach { print("\($0): \($1)\n") }
print("-------------\n\n")
}
defaults.set(value, forKey: key); printUD()
defaults.set(nil, forKey: key); printUD()
defaults.set(value, forKey: key); printUD()
defaults.removeObject(forKey: key); printUD()
Sebelum iOS 11, ini akan mengakibatkan serialisasi nil
menjadi Data
dan menimbulkan kesalahan.