NSUserDefaults에서 사용자 기본값을 삭제하는 방법은 무엇입니까?


79

즉, 내 앱은 처음에 몇 가지 표준 기본값을 설정합니다. 그러면 해당 값이 사용자에 의해 재정의 될 수 있습니다. 그리고 사용자가 일을 엉망으로 만들면 해당 설정을 앱 기본값으로 다시 설정하고 싶습니다. 내가 이해했듯이 앱 기본값은 사용자 기본값과 다른 사전이며 사용자 기본값은 해당 앱 기본값을 재정의합니다. 하지만 사용자 기본값을 삭제하는 방법을 보지 못했습니다. 어떤 생각?

답변:



97

이 코드 사용

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"MyKey"];

즉시 저장하려면 동기화하는 것을 잊지 마십시오

[[NSUserDefaults standardUserDefaults] synchronize];

NSUserDefaults 클래스 참조

동기화 -이 메서드는 주기적으로 자동으로 호출됩니다. 자동 동기화를 기다릴 수없는 경우 (예 : 응용 프로그램이 종료되는 경우) 또는 사용자 기본값을 디스크에있는 항목으로 업데이트하려는 경우에만이 메서드를 사용하십시오. 변경하지 않았지만.

스위프트 5 :

UserDefaults.standard.removeObject(forKey: "MyKey")
UserDefaults.standard.synchronize()

2
[[NSUserDefaults standardUserDefaults] synchronize]에 +1; 나는 보통 이것을 추가하는 것을 잊는다.
Augustine

동기화하지 않을 경우 앱을 닫을 때 자동으로 동기화됩니다.
Yucel Bayram 2013

1
@yucelbayram-> yup,하지만 즉시 저장하려면 syn.
Rajneesh071

1
@ Rajneesh071 네 맞습니다.
Yucel Bayram

현재 Apple 문서에서는 동기화 방법에 대해 다음과 같이 말합니다. "기본 데이터베이스에 대한 보류중인 비동기 업데이트를 기다렸다가 반환합니다.이 방법은 불필요하며 사용해서는 안됩니다." 더 이상 사용할 필요가 없습니다.
anders32

8
NSUserDefaults * removeUD = [NSUserDefaults standardUserDefaults];
[removeUD removeObjectForKey:@"shoping"];
[[NSUserDefaults standardUserDefaults]synchronize ];

8

간편한 복사 붙여 넣기를위한 Swift 버전 :

var idForUserDefaults = "somestupidtext"
var userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.removeObjectForKey(idForUserDefaults)
userDefaults.synchronize()

또는

NSUserDefaults.standardUserDefaults().removeObjectForKey("somestupidtext")
NSUserDefaults.standardUserDefaults().synchronize()

하는 애플의 문서 상태 .synchronize() 불필요하며 사용하지 않아야합니다. " developer.apple.com/documentation/foundation/userdefaults/...
제임스 요르단 테일러

6

특정 KEY 값을 제거하려면 :

Swift 3+

UserDefaults.standard.removeObject(forKey: "KEY")

Obj-C

[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"KEY"];
[[NSUserDefaults standardUserDefaults] synchronize];

UserDefaults / Clear All datas재설정 해야하는 경우 :

NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];

스위프트 3 :

if let bundle = Bundle.main.bundleIdentifier {
    UserDefaults.standard.removePersistentDomain(forName: bundle)
}

4

Swift 3.0 코드 업데이트 :

UserDefaults.standard.removeObject(forKey: "YOURKEY")


2
Value of type 'UserDefaults' has no member 'remove'
Charlie Fish

1
kbunarjo, 당신은 이것을 시도 했습니까? LOL. 스위프트 3 -UserDefaults.standard.removeObject (forKey : "키")
제프

1
@Jeff 그들은 최근에 Swift 3 (3.1)의 최신 버전을 출시했습니다. 아직 문서를 보지 않았으므로 이것이 내 버전이 더 이상 작동하지 않는 이유라고 가정합니다.
kbunarjo

Ya, 그것이 재밌다고 생각했습니다 :)
Jeff

1
UserDefaults.standard.removeObject (forKey : "YOURKEY");
Martyn Chamberlin

0

Swift 4에서

    UserDefaults.standard.removeObject(forKey: "your_key")
    UserDefaults.standard.synchronize()

-1

신속한 방법

UserDefaults.standard.removeObject(forKey: "aKey")
UserDefaults.standard.synchronize()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.