본문 바로가기

Mac&iOS

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

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.



'Mac&iOS' 카테고리의 다른 글

Apple 오픈 소스 사이트  (0) 2015.02.16
번들에 포함된 html 파일을 safari로 열기  (0) 2015.02.16
NSDisplayOperationStack crash문제  (0) 2015.02.11
unzip command를 이용한 압축 해제  (0) 2015.02.08
Mac OS 버전 체크  (0) 2015.02.08