NSUserDefaults removeObjectForKey против setObject: nil - PullRequest
110 голосов
/ 17 мая 2011

Следующие две строки эквивалентны?

1.[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"example key"]

2.[[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"example key"]

Ответы [ 2 ]

94 голосов
/ 19 мая 2011

Да, обе строки кода эквивалентны, обе приведут к чтению nil

id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"example key"];

NSUserDefaults вернет nil, если ключ не был найден.Я бы порекомендовал использовать removeObjectForKey вместо установки на ноль.

здесь показано, как проверить, установило ли значение ключа значение nil, удалить запись ключа из NSUserDefaults standardUserDefaults.

NSArray *keys = [[[NSUserDefaults standardUserDefaults] dictionaryRepresentation] allKeys] copy];
   for(NSString *key in keys) {
       NSLog(@"Key Name: %@", key);
}
[keys release];

или просто сбросить словарь ключ / значение NSUserDefaults standardUserDefaults

NSLog(@"All contents of NSUserDefaults: %@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]);
12 голосов
/ 19 января 2017

Swift 3.0

Приведенный ниже ответ больше не относится к случаю, когда я проверял это. Если установлено значение nil, результатом является сохранение данных NSCFData. Возможно ссылка на объект NSNull, но я не уверен.

Чтобы полностью удалить значение для ключа, используйте UserDefaults.standard.removeObject(forKey: "YourDefault")

Я тестировал со следующим кодом:

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"))")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...