2012-09-25 4 views
0

프로토콜에 문제가 있습니다.iPhone 또는 iPad 장치에 따른 프로토콜을 준수합니다.

@class SideToolBarDelegate; 
@interface AuthentificationViewController : UIViewController <ASIHTTPRequestDelegate, UITextFieldDelegate,SideToolBarDelegate> { 
} 
... 

나는 내 수업 "AuthentificationViewController은"프로토콜 "SideToolBarDelegate는"단지 내가 아이폰 버전이고 내가 아이 패드 버전입니다 그것을 적합하지 않은 것으로 따르는 지 싶습니다 :이 같은 클래스가 있습니다. 내가 어떻게 선언 할 수 있니? 감사.

답변

2

프로젝트 속성에서 일부 defins를 설정하고 ifdef를 사용할 수 있습니다. 좋아요 :

@interface AuthentificationViewController : UIViewController <ASIHTTPRequestDelegate, UITextFieldDelegate 
#ifdef IPAD 
,SideToolBarDelegate> 
#else 
> 
#endif 

하지만 이것은 오래된 C 방식입니다. 객체 지향 응용 프로그램 설계를 준수하는 프로그램에서이를 수행하는 것은 매우 나쁜 생각입니다. 이 경우 두 더 많은 방법이 있습니다

  1. 가 아이폰과 아이 패드
  2. 에 대해 별도의 서브 클래스를 만드는대로이 하나 개의 클래스를 만들기를 아이폰에서 SideToolBarDelegate 방법을 사용 해달라고. 이로 인해 코드가 명확 해지고 향후 유지 관리가 향상됩니다. 결국

내가 viewControllers 두 클래스를 만드는 제안 :

AuthentificationiPadViewController : UIViewController <ASIHTTPRequestDelegate, UITextFieldDelegate> 
AuthentificationiPhoneViewController : UIViewController <ASIHTTPRequestDelegate, UITextFieldDelegate, SideToolBarDelegate> 

그냥 코드의 미래의 디버깅을 생각!

0

당신이 하지는 보편적 인 응용 프로그램을 작성했다면, 당신이 컴파일시에 아이 패드 또는 아이폰의 여부를 결정하기 위해 전처리 매크로의 몇 가지를 정의 할 수 있습니다 :

#define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
#define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) 

다음

#if IS_IPHONE 

@class SideToolBarDelegate; 
@interface AuthentificationViewController : UIViewController <ASIHTTPRequestDelegate, UITextFieldDelegate,SideToolBarDelegate> { 
} 

#else 

@interface AuthentificationViewController : UIViewController <ASIHTTPRequestDelegate, UITextFieldDelegate> { 
} 

#endif 
그런 짓을

보편적 인 앱 (사례와 비슷하게 들릴 수 있음)을 만든 경우에는 컴파일 타임에 확인할 수 없습니다. 실행 시간은 이고 실행 시간은입니다.

그런 경우입니다. 언급 한 @pro_metedor와 같은 iPhone 및 iPad 용 별도의보기를 만드는 것이 좋습니다.

0

이 그것은 정말 필요 :

  1. 당신은 아이폰을위한 별도의 빌드 타겟을 만들 수 있으며, 아이 패드가 활성 대상으로 선택된 [응용 프로그램] -iPad 대상으로
  2. 애플 리케이션, 프로젝트를 선택 -> 편집 활성 대상 [app] -iPad. "C 플래그"를 검색하고 두 번 클릭하십시오. "-D TARGET_IPAD"플래그를 추가하십시오. 이제 기호 TARGET_IPAD은 iPad 타겟 (here에서 그래디언트)에 대해서만 정의됩니다.
  3. 가 코드를 변경 :
  4. SideToolBarDelegate @class

;

@interface AuthentificationViewController : UIViewController < 
    ASIHTTPRequestDelegate, 
    UITextFieldDelegate 
#ifdef TARGET_IPAD 
    ,SideToolBarDelegate 
#endif 
> 
{ 
} 
관련 문제