从子类访问UITableView

时间:2011-08-25 20:07:15

标签: objective-c cocoa-touch

我有两个视图控制器,class Aclass BClass Bclass A的子类。 Class B已定义UITableView,在父class A中,我希望能够[table reloadData]。所以我想从父class B访问class A的成员变量。我尝试了整个前进声明的事情,但这没有成功。在class B中,我放了@class A。然后在我的class A中,我尝试声明一个class B对象来访问表格,如下所示:B *bView=[B alloc] init]; [bView.table reloadData] //doesn't work, I get error: Receiver B is a forward class and corresponding @interface may not exist

所以不确定为什么那不起作用,但也许我甚至不应该这样做。由于它是父类,是否有更好的方法来访问子成员变量?

2 个答案:

答案 0 :(得分:2)

父级没有对其子成员变量的隐式访问权限。所以从A的角度来看,B是任何旧的对象。

如果B是A的子类,那么你应该在B.h

中这样做
#import "A.h"

@interface B:A
{
...
}
@property (readwrite,retain) UITableView *table;

如果您希望在A中使用B,那么您可以在“A.h”中执行此操作,以防您需要B成员

@class B

@interface A:Foo
{
B* bar;
}

如果您不想要B成员

,请不要使用前瞻性声明

A.m

中的两种情况
#import "B.h"

你也可以使用#include guards来阻止双重导入。

#ifndef AHEADER_H
#define AHEADER_H

@interface A:Foo
...
@end

#endif

无论您使用#import A.h多少次,它都只会导入一次。

答案 1 :(得分:0)

你不应该这样做。为什么不在子类实现中重新加载表?如果要向现有代码添加一些新行为,可以覆盖类B中的A类方法。