2012-10-26 3 views
3

저는 AnimalViewController가 있습니다. 기본보기 컨트롤러입니다. 또한 UIStoryBoard에 AnimalViewController Scene이 있습니다.UIS 토리 보드 및 상속

나는 상속에 관한 질문이 있습니다.

@interface BearViewController : AnimalViewController 
@interface LionViewController : AnimalViewController 

AnimalViewController Scene으로 BearViewController를 인스턴스화 할 수 있습니까?

PS BearViewController 및 LionViewController에는 AnimalViewController와 동일한 인터페이스가 있습니다.

답변

2

솔루션 대신 스토리 보드 XIB를 사용하는 것입니다.

BearViewController *bearVC = [[BearViewController alloc] initWithNibName:@"Animal" bundle:nil]; 
LionViewController *lionVC = [[LionViewController alloc] initWithNibName:@"Animal" bundle:nil]; 
+0

[전략 패턴은이 문제를 해결하는 또 다른 방법입니다.] (http://stackoverflow.com/a/17381927/419348) – AechoLiu

-1

당신은 다음을 할 수 있습니다.하지만 스토리 보드가 이런 식으로 작업하도록 설계되지 않았다고 가정하면 AnimalViewController 오브젝트가 그냥 subclass으로 캐스팅되므로 기본적으로 다른 포인터 유형을 제외하고 얻을 수 있습니다. 나중에 BearViewController 정의 된 방법 중 하나를 호출 런타임 충돌 :

BearViewController *bearViewController = [storyboard instantiateViewControllerWithIdentifier:@"AnimalViewController"]; 

[[self navigationController] pushViewController:bearViewController animated:YES]; 
+0

캐스트는 실제 런타임 개체를 변경하지 않습니다. 단순히 컴파일러에게 "당신을 신뢰"한다고 말하면 런타임에 반환되는 객체가 BearViewController가 될 것입니다. 장면이 AnimalViewController로 구성되면 런타임시 반환 될 내용입니다 ... 그래서 작성한 코드는 BearViewController를 인스턴스화하지 않습니다. –

+0

이것은 정확히 내가 말한 의미입니다 ... 그것은 다른 포인터 유형을 제외하고는 아무것도 제공하지 않습니다. –

+0

BearViewController를 인스턴스화하는 방법에 대한 질문이있었습니다. 이 대답은 그 문제를 해결하지 못합니다. – Eric