다음 상황이 발생했습니다. 저는 UITextView control (MyTextView : UITextView)
을 확장 중입니다. 런타임 장치 버전에 따라 다른 구현이 있습니다. 그래서 현재 MyTextView
클래스를 구현할 때 "if-else"문이 많이 있습니다. 더 유지 보수, 나는 다른 클래스로 분할하고 싶은 있도록하기 위해모든 생성자에서 super를 호출하지 않고 클래스 인스턴스화
:
MyTextViewIos5 : MyTextView
, MyTextViewIos6:MyTextView
및 는 따라 만들 수있는 서브 클래스 런타임에 알 수 공장 함수를 만드는 방법 기기 iOS 버전으로
MyTextView를 매개 변수로 사용하는 경우이 솔루션이 완벽하게 작동합니다. MyTextView (externalTextView:MyTextView)
에서 상속 구체적인 방법과 그것을 확장하는 클래스가있을 때
MyTextView* textView = [Factory createWithFrame:frame];
이 문제는 시작 의 initWithFrame
방법은 다음과 같이 표시됩니다
- (id)initWithFrame:(CGRect)frame {
self = [Factory createWithFrame:frame];
if (self) {
...
}
return self;
}
을 대신 난 슈퍼 initwithFrame
를 호출 내 공장에 전화 해.
내가 externalTextView
구체적인 방법, MyTextViewIos5 또는 MyTextViewIos6가 호출 된 특정 메소드를 구현하지 않는 오류와 함께 응용 프로그램 충돌 전화
작동시키기위한 일시적인 해결책이 있습니까?
init 메소드에서'super'를 호출하지 않으시겠습니까? – sergio
나는 잠깐 동안 당신이'alloc'을 서브 클래스 화함으로써 이것을 처리 할 수 있다고 생각했지만 아마도 그렇게하지 않았을 것이다. (원래의 문제를 처리하는 "영리한"방법입니다.) –