Yanıtlar:
Swift 3.0
Bunu test ettiğimde aşağıdaki cevap artık geçerli değil. Ayarlandığında nil
sonucu NSCFData depolanmasını engeller. Muhtemelen bir NSNull nesne referansı, ancak pozitif değilim.
Anahtar kullanımı için bir değeri tamamen kaldırmak için UserDefaults.standard.removeObject(forKey: "YourDefault")
Aşağıdaki kodla test ettim:
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"))")
Evet, her iki kod satırı da eşdeğerdir, her ikisi de sıfır okunmasına neden olur
id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"example key"];
NSUserDefaults
anahtar bulunmazsa sıfır döndürür. Bunu removeObjectForKey
sıfır olarak ayarlamak yerine kullanmanızı tavsiye ederim .
Anahtar değerini sıfır olarak ayarlamanın anahtar girişini kaldırıp kaldırmadığını nasıl test edeceğiniz aşağıda açıklanmıştır NSUserDefaults standardUserDefaults
.
NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] copy];
for(NSString *key in keys) {
NSLog(@"Key Name: %@", key);
}
[keys release];
veya basitçe anahtar / değer sözlüğünü boşaltın NSUserDefaults standardUserDefaults
NSLog(@"All contents of NSUserDefaults: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
removeObjectForKey
mı olur?
setObject:nil
nesneyi de kaldıracaktır, sadece anahtarını değil. Yani her iki fonksiyon da tam olarak aynı sonuca neden olur. Ayrıca, saklanan tek nesneyi (ve anahtarı) kaldırırsanız (veya sıfıra ayarlarsanız), .plist dosyasının tamamı silinir.
Swift 5.0 + iOS 11 ve üstü
Her iki yöntem de değeri kaldırır. Bunu bir oyun alanında denedim:
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()
İOS 11'den önce bu , serileştirmeye nil
neden olur Data
ve bir hata verir.