-[NSUserDefaults registerDefaults :]의 용도는 무엇입니까?
차이점은 무엇입니까?
[[NSUserDefaults standardUserDefaults] registerDefaults:
[NSDictionary dictionaryWithObjectAndKey:anObject, @"something"]];
이:
[[NSUserDefaults standardUserDefaults] setObject:anObject forKey:@"something"];
차이점은 사용자가 등록한 첫 번째 코드 스 니펫은 사용자가 "속성"을 변경하지 않았을 때 사용되는 기본값이라는 것입니다.
따라서 키 이름 'Welcome message'와 함께 "property"를 제공하려면 속성이 nil을 반환하는 대신 기본 메시지 'Welcome first-time user'가 없을 때 표시 될 기본 메시지를 삽입 할 수 있습니다. 속성 변경.
if"property"가 nil을 반환하는지 확인하기 위해 테스트 를 작성할 필요가 없기 때문에 논리가 단순화 되고이 경우 다른 메시지를 만들 수 있습니다.
NSString *greeting = [[NSUserDefaults standardUserDefaults] stringForKey:@"Greeting"];
if(greeting == nil) {
NSLog(@"Welcome first-time user!");
}
게시 한 두 번째 코드 스 니펫은 속성을 다른 값으로 설정하기위한 것입니다. Userdefaults에서 프로그램 상태에 따라 값을 설정하기 위해 다른 set 메서드 (setString, setObject, setBoolean)가 있습니다.
편집 ----- 댓글에서 요청한대로 업데이트합니다.
첫 번째 방법은 이름에서 알 수 있듯이 기본값에 값을 등록하는 것입니다. 키 이름으로 속성에 처음 액세스 할 때 값은 객체의 경우 nil, 부울의 경우 false 또는 숫자의 경우 0입니다. 값이 프로그램에 설정되지 않은 경우 많은 테스트 등을 수행하는 대신 위의 예와 같은 "기본"작업을 수행하면 이러한 키에 대해 이미 미리 정의 된 값을 사용하여 응용 프로그램을 제공 할 수 있습니다.
registerDefaults를 넣는 일반적인 위치는 appDelegate의 initializer-method에 있습니다.
그런 다음 프로그램의 어딘가에 이러한 필드의 값을 설정하고 setObject, setString, setBoolean ...을 사용하고 검색을 위해 stringForKey, objectForKey ...를 사용합니다.
이것으로 생각하십시오
registerDefaults는 객체에 대해 합리적인 값을 제공 할 수있는 생성자입니다. 그렇지 않으면 이미 작성한 일부 기본값을 얻을 수 있습니다. 그런 다음 나중에 개체의 속성을 변경하려면 "생성자"가 아니라 set / get 메서드를 사용합니다.
간단히 말해서,
[[NSUserDefaults standardUserDefaults] setObject:@"Entropy" forKey:@"kName"]
"엔트로피"를 Library / Preference 폴더의 com.example.Demo.plist라는 파일에 저장합니다 (com.example.Demo는 번들 ID입니다. IOS 애플리케이션 보안 파트 20 – 로컬 데이터 저장소 참조 ).
[[NSUserDefaults standardUserDefaults] setObject:@"Mac OS X" forKey:@"kOS"];
NSDictionary *appDefaults = [NSDictionary dictionaryWithObjectsAndKeys:
@"Windows", @"kOS",
@"Google", @"kSearchEngine", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"kOS"]);
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"kSearchEngine"]);
NSLog(@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"kBrowser"]);
인쇄됩니다 "맥 OS X", "구글"(널)
사실로, registerDefaults
- 디스크에 저장하지 않습니다
- 설정되지 않은 키의 값만 설정합니다 ( "kOS"는에 의해 설정되고
setObject:forKey:"kSearchEngine"은 설정되지 않음).- 스칼라 값에 대해 0을 반환하고, 키가
registerDefaults와setObject:forKey:(이 경우 "kBrowser") 둘 다에 의해 설정되지 않은 경우 객체에 대해 nil을 반환합니다.
그리고 사용법 registerDefaults
환경 설정 및 설정 프로그래밍 가이드 에서 인용
이러한 표준 기본값이 앱에 적합하지 않은 경우 registerDefaults : 메서드를 사용하여 고유 한 기본값을 등록 할 수 있습니다. 이 메서드는 NSRegistrationDomain 도메인에 사용자 지정 기본값을 배치하여 기본 설정이 명시 적으로 설정되지 않은 경우 반환되도록합니다.
NSUserDefaults로 데이터를 저장하는 방법에서 인용
또 다른 팁은 미리 정의 된 NSDictionary 개체로 NSUserDefaults를 초기화 할 수 있다는 것입니다. 예를 들어 사용자가 프로그램과 상호 작용할 기회를 갖기 전에 기본값을 "false"또는 "true"로 설정할 수 있습니다. 제 경우에는 때때로 게임의 모든 레벨을 나타내는 배열을 만들고 각 배열 값에 플레이어가 레벨을 완료했는지 확인하기 위해 부울을 저장합니다. 이를 위해 데이터 개체를 만든 다음 NSUserDefaults에 등록합니다. 객체에 대한 이전 값이 있으면 아무 일도 일어나지 않습니다. 그렇지 않으면 내 빈 개체가 "기본값"기본값으로 저장됩니다.
추신 : Ole은 NSUserDefaults 로 기본값 처리 를 자세히 설명하는 아주 좋은 기사를 가지고 있습니다.
Another way of looking at it is this. If you delete the preferences file from ~/Library/Preferences, the defaults that are set by registerDefaults will be the ones that apply to the application until new preferences are set.
In Swift 2.1.1 Xcode 7.2
I added this snippet to application:didFinishLaunchingWithOptions to initialise the tintColorsIndex which is one of parameters user can change in the app.
let defaults = NSUserDefaults.standardUserDefaults()
defaults.registerDefaults([
"tintColorsIndex" : -1,
])
When the app is launched the very first time the tintColorsIndex will be assigned a value of -1 (an Int). If user has changed the color while using the app, their preference won't be overridden at subsequent launches.
User Defaults are grouped in domains... registerDefaults is used to add defaults to the registration domain..
You can read about the domains in Preferences and Settings Programming Guide.
참고URL : https://stackoverflow.com/questions/4931167/what-is-the-use-of-nsuserdefaults-registerdefaults
'Nice programing' 카테고리의 다른 글
| 파이썬에 '멀티 맵'구현이 있습니까? (0) | 2020.11.17 |
|---|---|
| 단순 통계-평균, 표준 편차 등을 계산하기위한 Java 패키지 (0) | 2020.11.17 |
| nginx proxy_pass로 요청 URL을 보존하는 방법 (0) | 2020.11.17 |
| 열거 형 클래스와 함께 범위 기반 For를 허용합니까? (0) | 2020.11.17 |
| Angular JS : 프라 미스에 바인딩하는 방법 (0) | 2020.11.17 |