2009-08-20 4 views
3

좋아요, 나는 동일한 헤더 파일에 두 개의 프로토콜을 가지고 있는데, Protocol1과 Protocol2라고 부르 자. "유형의 ID가 일치하지 않습니다유형 ID <Protocol1>은 ID <Protocol2>과 일치하지 않습니다.

id <Protocol1, Protocol2> delegate; 

내 NSWindowController 서브 클래스 구현의 끝에서 경고를 받고 있어요 : 나는 두 프로토콜을 준수하는 주요 응용 프로그램 컨트롤러, 다음과 같은 멤버를 가지고있는 NSWindowController 서브 클래스가 프로토콜 2 ". 그러나 위의 그림에서와 같이 대리인은 두 프로토콜 모두를 준수해야합니다.

또한 애플리케이션이 완벽하게 작동합니다. 이것을 할 다른 방법이 있습니까? 두 프로토콜을 함께 접을 수는 있지만 프로그램의 모듈성을 해칠 수 있습니다.

는 편집 : 여기

은 두 프로토콜입니다. 테스트 시나리오가 더 많으므로 짧습니다.

@protocol TPTBController <NSObject> 

-(void)sendGrowlMessage:(NSString *)message title:(NSString *)title; 

@end 

@protocol AddPower <NSObject> 

-(void)addPower:(NSArray *)array; 
-(void)setCanAddPower:(BOOL)can; 

@end 
+0

두 프로토콜 선언을 표시 할 수 있습니까? – bbum

+0

확실히, 편집 한 질문을 확인하십시오. 그들은 같은 파일에 있습니다. – Cinder6

답변

3

id-with-protocols이 실제로 프로토콜 목록을 지원하는지 여부는 언어 사양이 명확하지 않습니다. 프로토콜은 프로토콜 목록을 확장 할 수 있지만 구문이 지원하는지 여부는 분명하지 않습니다.

당신이 결합 된 프로토콜을 만들 수 있습니다 우아한되지 하다니

@protocol AddPowerAndTPTBController <AddPower, TPTBController> 
@end 
... 
id <AddPowerAndTPTBController> delegate; 

를 작동 것이다 델리게이트 클래스가 두 개가 아닌 AddPoewrAndTPTBController를 준수해야합니다.

+0

이것은 효과가 있습니다. 또한 대리인에게 속성을 지정하고 ID에 대해 채택 된 프로토콜을 지정하여 다른 방법을 찾았습니다. – Cinder6

0

NSWindowController 하위 클래스에서 프로토콜을 가져 오시겠습니까?

응용 프로그램이 효과가 있다고 생각하는 방향으로 나를 가리 킵니다. 정적 검사를 수행 할 때 컴파일러는 클래스가 프로토콜을 준수한다는 사실을 알 수없고 메시지를 실제로 전달할 때 성공할 수 있습니다 (따라서 응용 프로그램이 예상대로 작동하는 이유)

+0

그래, # 하위 클래스의 헤더 파일에서 프로토콜을 가져 왔습니다. 특히 프로토콜 중 하나가 준수되지 않는다고 불평하는 것이 나에게 이상한 것 같습니다. 그것은 대의원의 선언을 무시하는 것과 같습니다. – Cinder6

0

프로토콜을 별도의 파일로 분리 한 다음 두 파일을 모두 NSWindowController 클래스로 가져 오겠습니까?

관련 문제