NSUser Defaults 클리어
사용하고 있다+[NSUserDefaults standardUserDefaults]
응용 프로그램 설정을 저장합니다.이것은 약 12개의 문자열 값으로 구성됩니다.이러한 값을 기본값으로 설정하지 않고 영구적으로 삭제할 수 있습니까?
다음과 같이 응용 프로그램의 영구 도메인을 제거할 수 있습니다.
NSString *appDomain = [[NSBundle mainBundle] bundleIdentifier];
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:appDomain];
Swift 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];
}
Swift의 경우:
let defaults = NSUserDefaults.standardUserDefaults()
defaults.dictionaryRepresentation().keys.forEach { defaults.removeObjectForKey($0) }
코드를 깔끔하게 하는 확장자를 좋아합니다.
extension NSUserDefaults {
func clear() {
guard let domainName = NSBundle.mainBundle().bundleIdentifier else {
return
}
self.removePersistentDomainForName(domainName)
}
}
스위프트 5
extension UserDefaults {
func clear() {
guard let domainName = Bundle.main.bundleIdentifier else {
return
}
removePersistentDomain(forName: domainName)
synchronize()
}
}
주의: 이 답변은 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()
이걸 찾았어요
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
위의 답변은 모두 매우 관련이 있지만 삭제된 앱의 사용자 기본값을 재설정할 수 없는 경우 시뮬레이터의 콘텐츠 설정을 재설정할 수 있습니다. 그러면 작동합니다.
버그든 뭐든 간에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의 persistentDomainForName 메서드를 호출합니다.docs가 기술하고 있듯이 메서드는 "지정된 영속 도메인의 키와 값을 포함하는 사전을 반환합니다." 대신 dictionaryRepresentation:을 호출하면 더 넓은 범위에 적용되므로 다른 설정을 포함할 수 있는 사전이 반환됩니다.
리셋할 값을 필터링 할 필요가 있는 경우는, 키를 사용해 반복하는 것이 방법입니다.물론 앱의 모든 프리프(pref)를 신경 쓰지 않고 nuking하고 싶다면 위에 게시된 다른 방법 중 하나가 가장 효율적입니다.
리셋이 필요한 애플리케이션 설정이 nsuserdefault인 경우(내 경우), Anthony McCormick의 답변(Iphone - 장치의 미디어에 대한 애플리케이션 액세스를 활성화하는 방법? - ALAssetsLibraryErrorDomain Code=-3312 "글로벌 액세스 거부")입니다.
디바이스에서 [설정]으로 이동합니다.일반>리셋>로케이션 리셋 경고
이거 먹어봐, 나한테는 효과가 있어.
코드 한 줄
[[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]];
언급URL : https://stackoverflow.com/questions/545091/clearing-nsuserdefaults
'source' 카테고리의 다른 글
Excel에서는 각 행의 한 열에 있는 모든 값을 합산하고 다른 열은 특정 값입니다. (0) | 2023.04.22 |
---|---|
YouTube나 Maps 등의 iPhone 앱에 http+domain 기반의 URL Scheme를 등록할 수 있습니까? (0) | 2023.04.22 |
모든 Git 기록에서 문자열 검색 (0) | 2023.04.22 |
Chrome이 자동 완성="off"를 무시합니다. (0) | 2023.04.22 |
C#일반목록T타입취득방법 (0) | 2023.04.17 |