Mac&iOS

Mac OS에서 윈도우 레지스트리와 비슷한 NSUserDefaults 사용하기

잠재우기 2015. 2. 12. 22:02

Mac에는 윈도우 운영체제와 같은 레지스트리가 없습니다. 대신 NSUserdefaults class를 이용하면 각 app들의 환경설정 값들을 운영체제에 저장할 수 있습니다. 


저장하는 방법은 NSDictionary를 이용하는 방법과 유사합니다.

[[NSUserDefaults standardUserDefaults] setObject:@"ko" forKey:@"Language"];

[[NSUserDefaults standardUserDefaults] setObject:@"kr" forKey:@"Country"];

[[NSUserDefaults standardUserDefaults] synchronize];


언어와 국가를 환경설정에 저장하는 Objective C코드입니다. 인스톨러나 세팅쪽에서 환경 설정을 해 두면 이후에 해당 값을 참조하여 UI를 바꾸기 위해 사용할 수 있습니다. 


synchronize 를 해야 그 값이 그 시점에 반영되는 것으로 보입니다. 

위의 문장이 실행되면, 현재의 프로젝트의 도메인 값을 가진 plist가 /Library/Preferences 하위에 serialize된 것을 확인할 수 있습니다. 

(숨김파일을 확인하시면 /Library/Preferences 하위에 .GlobalPreferences.plist 파일도 같이 있는데, 여기 내부에도 같이 저장되는 것으로 보입니다.)

plist파일을 열어보면 @"Language"와 @"Country" 에 각각 @"ko", @"kr"이 입력되어 있을 겁니다.


반대로 읽어 들이는 방법도 NSDictionary와 유사합니다. 

NSString* language = [[NSUserDefaults standardUserDefaults] stringForKey:@"Language"];

NSLog(@"language = %@", language);


기본적으로 프로젝트의 도메인 값을 가진 plist에서 읽어오도록 되어 있으나 파일이 없을 경우에도 .GlobalPreferences.plist에 값이 남아 있다면 읽어 올 수 있으니 주의해야 합니다.


다양한 Getter를 제공하니 저장한 타입에 맞게 사용하면 됩니다.

- (NSString *)stringForKey:(NSString *)defaultName;

- (NSArray *)arrayForKey:(NSString *)defaultName;

- (NSDictionary *)dictionaryForKey:(NSString *)defaultName;

- (NSData *)dataForKey:(NSString *)defaultName;

- (NSArray *)stringArrayForKey:(NSString *)defaultName;

- (NSInteger)integerForKey:(NSString *)defaultName;

- (float)floatForKey:(NSString *)defaultName;

- (double)doubleForKey:(NSString *)defaultName;

- (BOOL)boolForKey:(NSString *)defaultName;

- (NSURL *)URLForKey:(NSString *)defaultName;





터미널의 command 에서도 여기에 해당하는 값을 바꿀 수 있는 방법을 제공합니다.


예를 들면 Finder에서 숨김파일을 표시하기 위해서 터미널에서 다음과 같이 입력합니다.


defaults write com.apple.Finder AppleShowAllFiles YES

Finder에서 해당 값이 설정된 것을 확인하려면 다시 실행해야 합니다. 


Finder의 환경설정 값도 /Library/Preferences 하위에 com.apple.Finder.plist 라는 곳에 저장되어 있나봅니다. 그중 AppleShowAllFiles 키 값은 숨김 파일을 포함한 모든 파일을 보여줄 지 말지를 설정하는 값으로 보이며, 위의 명령을 실행해서 YES로 세팅되면, Finder에서 모든 파일을 보여주게 되는 것입니다. 


 defaults write domain { key 'value'}


다시 이전처럼 숨김 상태로 되돌릴려면 값을 NO로 세팅해주면 됩니다.

defaults write com.apple.Finder AppleShowAllFiles NO


반대로 read를 사용하면 읽을 수 있습니다.

defaults read com.apple.Finder AppleShowAllFiles


특정 키값이 아닌 전체 키에 대한 값을 다 읽으려면 key를 입력하지 않으면 됩니다.


defaults read com.apple.Finder


Copyright © 2015 by ZAMCOM, All rights reserved.