我有两个视图控制器,class A
和class B
。 Class B
是class 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
所以不确定为什么那不起作用,但也许我甚至不应该这样做。由于它是父类,是否有更好的方法来访问子成员变量?
答案 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类方法。