Respostas:
Swift 3.0
A resposta abaixo não é mais o caso quando testei isso. Quando definido para nilo resultado, NSCFData está sendo armazenado. Possivelmente uma referência de objeto NSNull, mas não tenho certeza.
Para remover completamente um valor para um uso de chave UserDefaults.standard.removeObject(forKey: "YourDefault")
Testei com o seguinte código:
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"))")
Sim, as duas linhas de código são equivalentes, ambas resultarão em leitura nula
id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"example key"];
NSUserDefaultsretornará nulo se a chave não for encontrada. Eu recomendaria usar o em removeObjectForKeyvez de defini-lo como nulo.
aqui está como testar se definir o valor da chave como nulo removeu a entrada da chave NSUserDefaults standardUserDefaults.
NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] copy];
for(NSString *key in keys) {
NSLog(@"Key Name: %@", key);
}
[keys release];
ou simplesmente despeje o dicionário de chave / valor de NSUserDefaults standardUserDefaults
NSLog(@"All contents of NSUserDefaults: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
Swift 5.0 + iOS 11 e superior
Ambos os métodos removem o valor. Tentei isso em um playground:
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()
Antes de iOS 11 este irá resultar em serialização nilem Datae lançar um erro.