NSUserDefaults 지우기
+[NSUserDefaults standardUserDefaults]
응용 프로그램 설정을 저장 하는 데 사용 하고 있습니다. 대략 12 개의 문자열 값으로 구성됩니다. 이 값을 기본값으로 설정하는 대신 영구적으로 삭제할 수 있습니까?
다음과 같이 응용 프로그램의 영구 도메인을 제거 할 수 있습니다.
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
스위프트 3 이상에서 :
if let bundleID = Bundle.main.bundleIdentifier {
UserDefaults.standard.removePersistentDomain(forName: bundleID)
}
이것은 @samvermette의 답변과 비슷하지만 조금 더 깨끗한 IMO입니다.
이 코드는 기본값을 등록 도메인으로 재설정합니다.
[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];
즉, removeObjectForKey
해당 앱에 등록한 모든 단일 키에 해당합니다.
이 Apple Developer Forums 스레드 에서 Ken Thomases의 크레딧 .
-사용해 보셨습니까 removeObjectForKey
?
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"defunctPreference"];
Swift의 답변은 다음과 같습니다.
let appDomain = NSBundle.mainBundle().bundleIdentifier!
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)
개발 중에 필요한 경우 시뮬레이터를 재설정하여 모든을 삭제할 수도 있습니다 NSUserDefaults
.
iOS 시뮬레이터-> 컨텐츠 및 설정 재설정 ...
시뮬레이터의 모든 앱과 파일도 삭제됩니다.
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];
for (NSString *key in [defaultsDictionary allKeys]) {
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
스위프트에서 :
let defaults = NSUserDefaults.standardUserDefaults()
defaults.dictionaryRepresentation().keys.forEach { defaults.removeObjectForKey($0) }
나는 이것을 찾았다:
osascript -e 'tell application "iOS Simulator" to quit'
xcrun simctl list devices | grep -v '^[-=]' | cut -d "(" -f2 | cut -d ")" -f1 | xargs -I {} xcrun simctl erase "{}"
출처 : https://gist.github.com/ZevEisenberg/5a172662cb576872d1ab
코드를 깨끗하게 만들 때 확장 기능을 좋아합니다.
extension NSUserDefaults {
func clear() {
guard let domainName = NSBundle.mainBundle().bundleIdentifier else {
return
}
self.removePersistentDomainForName(domainName)
}
}
참고 :이 답변은 Swift에도 업데이트되었습니다.
한 줄로하는 것은 어떻습니까?
@Christopher Rogers의 답변을 확장-허용되는 답변.
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
예, 언젠가 필요할 수도 synchronize
있습니다.
[[NSUserDefaults standardUserDefaults] synchronize];
이 작업을 수행하는 방법을 만들었습니다.
- (void) clearDefaults {
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
[[NSUserDefaults standardUserDefaults] synchronize];
}
스위프트 ?
더 빠르고 쉽게.
extension UserDefaults {
class func clean() {
guard let aValidIdentifier = Bundle.main.bundleIdentifier else { return }
standard.removePersistentDomain(forName: aValidIdentifier)
standard.synchronize()
}
}
그리고 사용법 :
UserDefaults.clean()
위의 모든 답변은 매우 관련이 있지만 누군가가 삭제 된 앱의 사용자 기본값을 재설정 할 수없는 경우 시뮬레이터의 콘텐츠 설정을 재설정 할 수 있으며 작동합니다.
그것은 버그 또는 다른 것이지만 removePersistentDomainForName
모든 NSUserDefaults
값 을 지우는 동안 작동하지 않습니다 .
따라서 더 나은 옵션은를 재설정하고 PersistentDomain
다음과 같은 방법으로 수행 할 수 있다는 것입니다.
NSUserDefaults.standardUserDefaults().setPersistentDomain(["":""], forName: NSBundle.mainBundle().bundleIdentifier!)
@ folse의 답변을 확장하면 더 정확한 구현이 될 것이라고 믿습니다 ...
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
NSDictionary *defaultsDictionary = [[NSUserDefaults standardUserDefaults] persistentDomainForName: appDomain];
for (NSString *key in [defaultsDictionary allKeys]) {
NSLog(@"removing user pref for %@", key);
[[NSUserDefaults standardUserDefaults] removeObjectForKey:key];
}
... NSUserDefault의 permanentDomainForName : 메소드 호출. 문서 상태로 "지정된 영구 도메인의 키와 값을 포함하는 사전을 반환합니다." dictionaryRepresentation :을 호출하면 대신 더 넓은 범위에 적용되는 다른 설정을 포함하는 사전을 반환합니다.
재설정 할 값을 필터링해야하는 경우 키를 반복하는 것이 좋습니다. 분명히, 응용 프로그램의 모든 기본 사항을 고려하지 않고 원한다면 위에 게시 된 다른 방법 중 하나가 가장 효율적입니다.
마이크에 액세스하기 위해 재설정이 필요한 응용 프로그램 설정이 nsuserdefault (내 경우) 인 경우 간단한 해결책은 Anthony McCormick ( Iphone-응용 프로그램이 장치의 미디어에 응용 프로그램 액세스를 활성화하는 방법 )에 대한 답변입니다 .-ALAssetsLibraryErrorDomain Code = -3312 "Global denied access" ).
기기에서 설정> 일반> 재설정> 위치 재설정 재설정으로 이동하십시오.
이것을 시도하십시오, 그것은 나를 위해 일하고 있습니다.
한 줄의 코드
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
참고 URL : https://stackoverflow.com/questions/545091/clearing-nsuserdefaults
'Programing' 카테고리의 다른 글
타이프 스크립트를 사용해야합니까? (0) | 2020.03.22 |
---|---|
jupyter에 python3 커널을 추가하는 방법 (IPython) (0) | 2020.03.22 |
파이썬에서 목록의 목록에 가입 (0) | 2020.03.22 |
Mac OS X 및 여러 Java 버전 (0) | 2020.03.22 |
새 콘센트 연결을 삽입 할 수 없습니다 : 이름이 지정된 클래스에 대한 정보를 찾을 수 없습니다 (0) | 2020.03.22 |