UIРаскадровка и наследование

У меня есть AnimalViewController. Это базовый контроллер представления. У меня также есть сцена AnimalViewController в UIStoryBoard.

У меня вопрос о наследстве.

@interface BearViewController : AnimalViewController
@interface LionViewController : AnimalViewController

Можно ли создать экземпляр BearViewController со сценой AnimalViewController?

PS BearViewController и LionViewController имеют тот же интерфейс, что и AnimalViewController.


person Voloda2    schedule 26.10.2012    source источник


Ответы (2)


Решение состоит в том, чтобы использовать xib вместо раскадровки.

BearViewController *bearVC = [[BearViewController alloc] initWithNibName:@"Animal" bundle:nil];
LionViewController *lionVC = [[LionViewController alloc] initWithNibName:@"Animal" bundle:nil];
person Voloda2    schedule 29.10.2012

Вы можете сделать следующее, но я не думаю, что раскадровки были разработаны для чего-то подобного, у вас все равно будет объект AnimalViewController, только что приведенный к subclass, поэтому в основном вы ничего не получите (кроме другого типа указателя) и получите сбои во время выполнения, когда вы вызвать любой из BearViewController определенных методов позже:

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

[[self navigationController] pushViewController:bearViewController animated:YES];
person Tomasz Zabłocki    schedule 26.10.2012
comment
Приведение не изменяет фактический объект среды выполнения. Он просто говорит компилятору доверять вам... что объект, возвращаемый во время выполнения, будет BearViewController. Если сцена настроена как AnimalViewController, это то, что будет возвращено во время выполнения... Таким образом, написанный вами код не создает экземпляр BearViewController. - person J Shapiro; 26.10.2012
comment
Это именно то, что я имел в виду... это не дает вам ничего, кроме другого типа указателя. - person Tomasz Zabłocki; 26.10.2012
comment
Вопрос был о том, как создать экземпляр BearViewController. Этот ответ не касается этого. - person Eric; 14.12.2012