답변:
스위프트 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"))")
예, 두 줄의 코드는 동일합니다. 둘 다 읽기가 없습니다.
id obj = [[NSUserDefaults standardUserDefaults] objectForKey:@"example key"];
NSUserDefaults
키를 찾을 수 없으면 nil을 반환합니다. removeObjectForKey
nil로 설정하는 대신를 사용하는 것이 좋습니다 .
여기에 키 값을 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]);
removeObjectForKey
됩니까?
setObject:nil
키뿐만 아니라 객체도 제거합니다. 따라서 두 함수 모두 정확히 동일한 결과를 발생시킵니다. 또한 저장된 객체 (및 키) 만 제거 (또는 nil로 설정)하면 전체 .plist 파일이 삭제됩니다.
Swift 5.0 + iOS 11 이상
두 방법 모두 값을 제거합니다. 놀이터에서 이것을 시도했습니다.
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()
iOS 11 이전에는 이로 인해 직렬화 nil
되고 Data
오류가 발생합니다.