0

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

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

就UItableView而言,它工作正常,但是当我尝试使用导航控制器将视图推送到顶部时,它不起作用,然后我发现 self ...在我的主类中实际上是一个实例我的子类...什么?所以自我实际上并不等于自我......

谁能告诉我我在这里做错了什么?

编辑:所以我把它改成了一个代表的子类,它工作正常,以防万一其他人遇到这个问题,但我仍然对为什么它首先发生感到困惑......

代码:

@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];不起作用

4

1 回答 1

1

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

当您有一个子类的实例,并且您向 发送消息时self,如果有子类的实现,将始终被调用。不管你是在超类的实现文件中还是在子类的实现文件中。

这是多态性的基本要素:它允许子类覆盖父类的行为。举个-[UIView drawRect:]例子。要调用子类的绘图代码,当调用代码时,需要UIView调用[self drawRect:]的是子类的绘图实现。

记住超类和子类不是父对象和子对象,而是适用于同一对象的越来越少的特定类型,这可能会有所帮助。AUITableView也是一个UIScrollView, UIView, and NSObject,但是当你做一个时,有一个对象就是所有这些东西,并且self总是指那个那个。

于 2013-01-07T06:40:07.093 回答