Apakah kedua baris berikut ini setara?
1.
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"example key"]
2.
[[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"example key"]
nsuserdefaults
ma11hew28
sumber
sumber
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:
sumber
Ya, kedua baris kode itu setara, keduanya akan menghasilkan pembacaan nihil
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
.atau cukup buang kamus kunci / nilai
NSUserDefaults standardUserDefaults
sumber
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:
Sebelum iOS 11, ini akan mengakibatkan serialisasi
nil
menjadiData
dan menimbulkan kesalahan.sumber