2012-05-21 6 views
0

메시지 작성보기 컨트롤러 (MFMessageComposeViewController)를 표시하고 메시지가 전송/취소/실패되었는지 확인하기 위해 모든보기 컨트롤러가 MFMessageComposeViewControllerDelegate 메서드를 처리 할 수 ​​있어야합니다. 그래서 내 생각은 UIViewController이 뷰 컨트롤러에서 이러한 메서드를 서브 클래 싱하는 것이었다. 그런 다음 위의보기 컨트롤러를 하위 클래스로 메시지를 보낼 수 있어야하는 모든보기 컨트롤러를 갖게합니다.iOS - 코드 중복 및 프로토콜을 피하기 위해 서브 클래스 만들기

@protocol MessageProcessing 

@required 

- (void)presentMessageCompose; 
- (void)processMessageCancelled; 
- (void)processMessageSent; 
- (void)processMessageFailed; 

@end 

: 나는 그것을 때

그래서

... 등등 BaseMessageViewController : UIViewController

그리고 ViewController1 : BaseMessageViewController, ViewController2 : BaseMessageViewController와 같은, 나는이 같은 프로토콜을 만들 것이라고 생각 그러나 BaseMessageViewController이이 프로토콜을 준수해야하는지 또는 내 "구체적인"보기 컨트롤러가이를 준수해야하는지 확실하지 않습니다.

하나의 생각은 내 BaseMessageViewController이 준수하면 클래스 뷰 상속 때문에 내 구체적인보기 컨트롤러가 자동으로 준수하게됩니다. 그러나 필자는 구체적인 뷰 컨트롤러에서 필요한 메서드를 구현하지 않는다는 경고를 보지 않습니다. 이러한 프로토콜을 정의 할 이유가 없다, BaseMessageViewController 자체에 보내는 메시지 경우

은 누군가가 나에게 여기에 도움의 손길 :

답변

1

을주지하시기 바랍니다 수 있습니다. 메소드를 BaseMessageViewController에 선언하고, 선언이 전송 된시기를 설명하도록 주석을 달아주세요.

또한 컴파일러 경고를 표시하지 않으려면 BaseMessageViewController의 메소드 구현을 제공해야합니다. 당신이 모든 서브 클래스는 메소드를 구현하려는 경우, 당신은이 패턴을 사용하여 BaseMessageViewController의 방법을 정의 할 수 있습니다

- (void)processMessageCancelled { 
    [self doesNotRecognizeSelector:_cmd]; 
    abort(); 
} 
+0

Java로 할 수있는 방법과 같은 메서드를 재정의하는 방법을 찾고 있습니다. 수퍼 클래스에 몇 가지 메서드를 선언 한 다음 하위 클래스에서 메서드를 직접 구현할 수 있습니다 (원하는 경우). 수퍼 클래스에서 선언되거나 수퍼 클래스 메서드를 사용하도록 남겨 둡니다. –

+0

KVO를'BaseMessageViewController'에 추가하여 모든 뷰 컨트롤러가'BaseMessageViewController'에 설정된 속성에 대해 KVO를 갖도록 할 수 있습니까? –

0

이것은 추상 기본 클래스 프로토콜 질문의 고전적인 예이다. 당신이 프레임 워크를 정의하고자 할 때

  • 프레임 워크에 의해 캡슐화 된 몇 가지 일반적인 우려와 일부 특정 우려, (이러한 클래스 클러스터라고 코코아) 추상 기본 클래스를 사용하여 하위에 의해 처리 될 수 있습니다 - 클래스. 메시지 구문 분석 프레임 워크가 그 예일 수 있습니다.

  • 프로토콜을 사용하여 자체 객체 계층 구조가 필요한 클래스에 대한 공통 계약을 정의하십시오. '재생'과 '정지'가 미디어 유형에 따라 완전히 다른 미디어 플레이어가 그 예일 수 있습니다.

다른 방법으로는 저스틴 스파르 - 여름은 libextobjc에서 '구체적인 프로토콜'을 정의합니다. . . https://github.com/jspahrsummers/libextobjc (Java 8의 구체적인 인터페이스와 유사).

관련 문제