奇怪的继承错误iOS

时间:2013-01-07 06:09:06

标签: objective-c ios uitableview inheritance

好的,所以我决定将我的 UITableView委托的代码移到另一个类中。如果你愿意的话,是一个子类,一个子类,这样可以更容易地访问我的 Cellforrowwithindexpath 函数在所述子类中所做的所有元素。

但现在有一个小问题......

UItableView 而言,它运行正常但是当我尝试使用导航控制器将视图推到最顶层时,它无法正常工作,然后我发现自我...在我的主要课堂内实际上是我的子类的实例......什么?所以自我实际上并不等于自我...

任何人都可以给我任何见解,我在做什么这么大错?

编辑:所以我改为将其改为委托的子类,它运行正常,以防其他人遇到此问题,但我仍然感到困惑,为什么会发生这种情况首先......

代码:

@interface OpenGameList : MainMenuViewContoller <UITableViewDelegate,UITableViewDataSource>
{

}

@end

在我的 MainMenuViewController的viewDidLoad 函数中

_openGameList = [[OpenGameList alloc] init];
_openGameList.delegate = self;

friendsTable.delegate = _openGameList;
friendsTable.dataSource = _openGameList;

而且之后似乎在 MainMenuViewController 中使用self等于 OpenGameList ,因此使用[[fromView navigationController] pushViewController:toView animated:NO];的原因不起作用

1 个答案:

答案 0 :(得分:1)

self总是指向实际实例化的对象 - 派生最多的类。

当你有一个子类的实例,并向self发送消息时,如果有子类的实现将始终被调用。无论您是否在超类的实现文件或子类的实现文件中都无关紧要。

这是多态的必要条件:它允许子类覆盖父类的行为。以-[UIView drawRect:]为例。要调用子类的绘图代码,当UIView中的代码调用[self drawRect:]时,它是需要调用的子类的绘图实现。

可能有助于记住,超类和子类不是父对象和子对象,而是应用于同一对象的越来越多的特定类型。 UITableView也是UIScrollViewUIViewNSObject,但是当你创建一个时,有一个对象就是所有这些东西,{ {1}}总是指那个。