2010-03-21 3 views
0

두 개의 대상에 대한 응용 프로그램을 생성하는 프로젝트가 있습니다.iphone - 헤더의 컴파일러 조건부

대상 중 하나에는 다른 하나의 대리자 프로토콜이 있어야합니다. 다른 하나의 대리자 프로토콜은 다른 하나에 존재하면 안됩니다. 그래서 나는 엑스 코드에 매크로를 만들어이 같은 헤더 선언 :

#ifdef TARGET_1 
@interface myViewController : UIViewController <UIScrollViewDelegate, UIPopoverControllerDelegate> 
#endif 

#ifdef TARGET_2 
@interface myViewController : UIViewController <UIScrollViewDelegate> 
#endif 

{ .... bla bla.... } 

문제는 엑스 코드는 @interface이 "더블"선언을 미워하고 저에게 오류가 모든 종류의를 제공하는 것을입니다. 선언 중 하나만 넣으면 오류가 사라집니다.

어떻게 해결할 수 있습니까? 어떤 도움을 주셔서 감사합니다.

+2

TARGET_1 및 TARGET_2이 (가) 동시에 true가 아닌지 확인하십시오. – kennytm

+0

예, 한 번에 그 중 하나만 맞습니다. – SpaceDog

+0

이상한 것을 발견했습니다. 하나도 사용하지 않아도 대상 이름으로 채워진 모든 PREPROCESSOR MACROS (릴리스, 배포 및 디버그)가 있어야합니다. 제 경우에는 "release"를 사용하지 않고 전 처리기 매크로 필드가 비어 있습니다. – SpaceDog

답변

1

재발행이 발생하면 두 심볼을 모두 정의해야합니다. 그것은 추한 모습

@interface myViewController : UIViewController <UIScrollViewDelegate 
#ifdef TARGET_1 
, UIPopoverControllerDelegate 
#endif 
> 

,하지만 난 더는 의미를 반영하는 생각 : 당신의 Target_1로와 TARGET_2 정의가 함께

+0

감사합니다! KennyTM에 나의 coment를 본다. .. 훌륭하다. – SpaceDog

1

개인적으로 뭔가를 쓰기 주저하지 말고 정의되지 않았는지 다시 확인합니다.

당신은 하나 더 수행 할 수 있습니다

#ifndef TARGET_1 
@protocol UIPopoverControllerDelegate 
@end 
#endif 

@interface myViewController : UIViewController <UIScrollViewDelegate, UIPopoverControllerDelegate> 

이 모든 과정의 이전 답변을 무효화하지 않습니다!

+0

감사합니다! 나는 SO의 전문가와 함께 매일 새로운 것을 배웁니다 !!!!! – SpaceDog