2011-02-01 2 views
1

app에서 사용하는 모든 상수를 넣는 데 사용하는 myConstants.h라는 파일이 있습니다. 이 파일은 변수 중 하나에 액세스해야하는 모든 클래스에서 가져옵니다.iPhone - 메서드없이 조건부 변수를 정의하는 방법

나는 보편적 인 앱을 만들고 있는데, iPad 또는 iPhone에서 실행되는 경우 다른 값을 가져야하는 변수가 있습니다.

나는 당신에게 내가 말하는 의미의 일반적인 예를 보여줍니다. 내 주요 코드에서

내가 좋아하는 뭔가를 할 수 있습니다 :

self.DEVICE = @"iphone"; 
self.IPAD = NO; 

if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { 
    self.DEVICE = @"ipad"; 
    self.IPAD = YES; 
} 

을하지만이 주요 코드를 정의합니다. 이 두 변수 중 하나를 사용하기 위해 클래스가 필요한 경우 주 클래스를 참조하고 변수를 읽는 복잡한 메서드를 작성해야합니다.

제 아이디어는 myConstants.h에 넣는 것입니다.

그러나 myConstants.h가 모든 파일이 모든 메서드가없는 #define 항목 인 일반 파일 일 경우 어떻게해야합니까?

제 아이디어는 전체 앱의 변수로 DEVICEIPAD 개의 변수를 전역 변수로 사용하여 모든 클래스에서 #import "myConstants.h"으로 사용할 수있게하는 것입니다.

이것이 가능합니까? 방법?

#if TARGET_OS_IPHONE 
NSString *device_ = @"iphone"; 
#endif TARGET_OS_IPHONE 

그런 다음 빌드 속성에 지시어를 정의

감사

답변

1

컴파일 시간에 해석되므로 #define 블록이이 경우 작동하지 않을 것이라고 생각합니다. 컴파일러는 사용자가 어떤 장치를 사용하고 있는지 어떻게 알 수 있습니까?

UIDevice extension을 사용하여 런타임에 장치 유형을 감지하는 앱 중 하나에서 뭔가를합니다 (if 문 사용). 이것은 잘 작동합니다.

+0

그게 전부입니다. 좋은 생각. 그것을 UIDevice의 확장으로 사용합니다. Erica Sadun 확장 기능을 사용하지 않고, 더 많은 것을 필요로하지 않기 때문에, 더 작은 것을 디자인하는 것입니다. 감사!!! – SpaceDog

1

당신은 프리 D 파일러를 사용할 수있다.

+0

이는 불행히도 컴파일 타임에만 유용하며 필요한 경우 런타임이 아닙니다. 어쨌든 고마워. – SpaceDog

+0

맞아요, 각 장치 "MyApp"와 "MyApp HD for iPad"에 대해 별도의 바이너리 라인을 따라 생각하고있었습니다. – MarkPowell

관련 문제