기존 값을 덮어 쓰지 않고 nsuserDefaults를 사용하여 사용자 기본값을 등록하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/2076816

문제

나는 AppDelegate 수업이 있습니다 +(void)initialize 기본값을 등록하는 데 사용하는 방법. 내가 사용하는 코드는 다음과 같습니다.

+ (void)initialize {
  NSDictionary *defaults = [NSDictionary dictionaryWithObjectsAndKeys:@"NO", @"fooKey", @"YES", @"barKey", nil];

  [[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}

또한 몇 개의 확인란을 보유하는 preferences.xib를 만들었습니다.NSButton) 선호도의 상태를 표시합니다. 그들은 묶여 있습니다 NSUserDefaultsController 동일한 키로 (이 경우 Fookey와 Barkey). 앱을 시작하고 "기본값"을 변경할 때마다 다음 앱 출시에서 복원됩니다.

이미 기존 값을 덮어 쓰지 않고 "기본 기본값"을 등록하는 방법이 있습니까? 아마도 앱을 빌드하고 시작할 때마다 환경 설정 파일이 재현되고 있습니까? 어쩌면 나는 확인란을 풀어야 할 것입니다 NSUserDefaultsController 그리고 선호도 창 컨트롤러의 사용자 정의 코드로 키 값을 직접 유지 하시겠습니까?

사용자 기본값을 유지하기위한 선택의 구현을 듣고 싶습니다.

Mac OS X 10.6.2 및 Xcode 3.2.1을 사용하고 있습니다

도움이 되었습니까?

해결책

문서에서 -registerDefaults: (강조 추가) :

등록 영역의 내용은 디스크에 기록되지 않습니다. 응용 프로그램이 시작될 때 마다이 메소드를 호출해야합니다.. 응용 프로그램의 리소스 디렉토리에 plist 파일을 배치하고 해당 파일에서 읽은 내용으로 RegisterDefaults를 호출 할 수 있습니다.

그래서 당신의 코드는 올바른 길에있었습니다. 이것이 기본 기본값을 등록하는 방법입니다.

나는 보통 이것을 사용합니다 -applicationDidFinishLaunching::

// Load default defaults
[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Defaults" ofType:@"plist"]]];

PLIST를 사용하면 앱에서 기본값을 쉽게 추가하고 변경할 수 있으며 사용의 실수를 저지르십시오. @"NO" 값으로도.

편집하다: 스위프트 3 변종:

 UserDefaults.standard.register(defaults: NSDictionary(contentsOf: Bundle.main.url(forResource: "Defaults", withExtension: "plist")!)! as! [String : Any])
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top