2012-08-13 2 views
11
를 사용하는

가능한 중복 :
Constants in Objective C어떻게 선언하고있는 NSString에게 전역 상수

내가 NSUserDefaults에서 일부 응용 프로그램의 설정을 저장합니다. NSString은 키로 사용됩니다. 문제는 해당 NSString 키를 사용하여 앱 전체에서 이러한 설정에 액세스해야한다는 것입니다. 앱의 일부에서 액세스 할 때 이러한 문자열 키를 잘못 입력 할 가능성이 있습니다. 응용 프로그램 전반에 걸쳐

, 나는 내가 응용 프로그램을 통해 액세스 할 수 있습니다 상수 글로벌는 NSString를 선언 할 수 이러한 진술
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"ReminderSwitch"]; 

BOOL shouldRemind = [[NSUserDefaults standardUserDefaults] boolForKey:@"ReminderSwitch"]; 

방법 및

있습니다. 그런 다음 해당 문자열 키를 잘못 입력하는 것에 대한 걱정없이 해당 상수를 사용할 수 있습니다.

답변

5

은 당신이 찾고있는 것 같다 것은 앱에서 문자열 상수를 정의하는 단지 방법입니다. 당신은을 사용하는 각 파일에이 파일을 포함 할 수 있습니다 당신은

// Constants.h 
FOUNDATION_EXPORT NSString *const MyFirstConstant; 
FOUNDATION_EXPORT NSString *const MySecondConstant; 
//etc. 

같은 헤더 파일을 작성해야합니다

:

내가 아래에 인용 한 this question 과에 this answer를 참조하십시오 상수 또는 미리 컴파일 된 헤더에> 프로젝트에 대한.

당신은 그것이 최종 제품에 연결되도록 응용 프로그램/프레임 워크의 대상에 추가되어야

// Constants.m 
NSString *const MyFirstConstant = @"FirstConstant"; 
NSString *const MySecondConstant = @"SecondConstant"; 

Constants.m 같이하는 .m 파일에서 이러한 상수를 정의합니다.

대신 # define'd 상수 의 문자열 상수를 사용의 장점은 문자열 비교 ([stringInstance isEqualToString:MyFirstConstant]) (그리고 쉽게 읽을 수, IMO)보다 훨씬 빠른 포인터 비교 (stringInstance == MyFirstConstant)를 사용 어떤지를 테스트 할 수 있다는 것입니다. 배리 Wark : 감사와

+0

을 그 그냥 응용 프로그램에서 상수를 원한다 (내부 li nkage) 그래서 왜 당신은 그가 그들을 내보낼 것을 제안하고 있는지 궁금하네요 (외부 연결)? – malhal

9

당신의 생각은 내가 생각하는 권리입니다.

Const.h

extern NSString *const UserIdPrefKey; 
extern NSString *const PasswordPrefKey; 
extern NSString *const HomepagePrefKey; 

이 Const.m

#import "AEConst.h" 

NSString *const UserIdPrefKey = @"UserIdPrefKey"; 
NSString *const PasswordPrefKey = @"PasswordPrefKey"; 
NSString *const HomepagePrefKey = @"UrlHomepagePrefKey"; 

만 Const.h를 가져와야합니다 : 예를 들어, 나는 다음과 같은 Const.h/m 파일을했다. 당신이 코드를 작성할 때 당신이 미스 타이핑을 피할 수 있도록

, 엑스 코드는 키 이름을 쓰기를 지원합니다.

5

이 작업을 수행하는 가장 쉬운 방법은의 Utils 같은 간단한 .H 파일을 만들 수 있습니다.시간은 다음 코드가 작성 :

#define kUserDefaults @"ReminderSwitch"

+3

예, 그렇게 안전하지 않습니다. 다른 주목할만한 C 파일이 눈치 채지 않고 무시할 수있는 기회가 있습니다. ( – thndrkiss

13

첫째, 당신은 진정한 통근자의 C 기호 가야 -하지 매크로. 이과 같이 수행됩니다

SomeFile.h

extern NSString *const MONConstantString; 

SomeFile.m 당신 ++ ObjC와 ObjC의 혼합을 사용하는 경우, 당신은 C에 대한 extern "C"를 지정해야합니다 것을

NSString *const MONConstantString = @"MONConstantString"; 

참고 ++ TUs - 그 이유는 #define d 개의 내보내기가 언어에 따라 다릅니다.


그런 다음 관련 인터페이스 근처에 상수를 넣을 수 있습니다. 예를 들어 리드를 취하면 앱의 환경 설정에 대한 일련의 인터페이스 또는 선언이 필요할 수 있습니다. 사용에

MONAppsPreferences.h

extern NSString *const MONApps_Pref_ReminderSwitch; 

MONAppsPreferences.m

NSString *const MONApps_Pref_ReminderSwitch = @"MONApps_Pref_ReminderSwitch"; 

:이 경우, 당신은 MONAppsPreferences 헤더에 선언을 추가 할 수 있습니다

#import "MONAppsPreferences.h" 
... 
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:MONApps_Pref_ReminderSwitch];