故事板和继承

3
我有一个AnimalViewController,它是一个基础视图控制器。我在UIStoryBoard中也有AnimalViewController场景。
关于继承我有一个问题。
@interface BearViewController : AnimalViewController
@interface LionViewController : AnimalViewController

是否可以使用AnimalViewController场景实例化BearViewController?

PS BearViewController和LionViewController与AnimalViewController具有相同的接口。

2个回答

2
解决方案是使用xib代替storyboard。
BearViewController *bearVC = [[BearViewController alloc] initWithNibName:@"Animal" bundle:nil];
LionViewController *lionVC = [[LionViewController alloc] initWithNibName:@"Animal" bundle:nil];

策略模式是解决这个问题的另一种方式。 - AechoLiu

-1
你可以这样做,但我认为故事板并不是设计用来做这样的事情的,你仍然会拥有一个AnimalViewController对象,只是强制转换为subclass,所以基本上你将得不到任何好处(除了不同的指针类型),并且在稍后调用任何BearViewController定义的方法时会导致运行时崩溃。
BearViewController *bearViewController = [storyboard instantiateViewControllerWithIdentifier:@"AnimalViewController"];

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

强制类型转换不会改变实际的运行时对象。它只是告诉编译器“相信你”...在运行时返回的对象将是BearViewController。如果场景配置为AnimalViewController,那么在运行时返回的就是AnimalViewController...所以你编写的代码并没有实例化BearViewController。 - J Shapiro
这正是我想表达的... 它除了不同的指针类型之外什么也没有给你。 - Tomasz Zabłocki
问题是关于如何实例化BearViewController。这个答案并没有解决这个问题。 - Eric

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接