2012-04-20 87 views
-2

我试图从基类访问子类成员变量。但我无法访问它。它返回一个空值..从目标c中的基类访问子类成员

为如..

我有基类ClassA和ClassB的子类。我试图从基类ClassA访问classB成员变量say x。但它返回null。我用某个值赋值了classB变量。

我试图这样..

In classA.h 

@classB 

@property (nonatomic, retain) classB *BObj; 


In classA.m 


#import classB.h 

@synthesize BObj; 

BObj = [[classB alloc]init]; 
NSLog(@"%d",BObj.x); //returns NULL 


In ClassB.h 

@interface ClassB :ClassA 

@property(nonatomic,retain) int x; 

In ClassB.m 

@synthesize x; 

x = 10; //This value should be read from super class(Class A). 
+1

您的代码在语法上根本无效。如果你不愿给我们真正的代码来看,那么任何想要帮助的人都必须发挥20个问题来解决这个问题。 – Chuck 2012-04-20 05:21:37

+0

@chuck:我粘贴了上面的代码,这是我的实际代码的副本。我刚刚用classA和classB取而代之。就这样。你能否提供一个例子来访问基类中的子类对象的值.. – 2012-04-20 05:30:40

+1

不,也不会编译。 – Chuck 2012-04-20 05:32:57

回答

0

尝试这种情况:的NSLog(@ “%d”,BObj.x);

+0

oh ..thanks ..但pblm不是那样..它没有给出任何警告或Error.it只是打印空值 – 2012-04-20 05:28:39

+0

的确,这是因为语法是正确的。你的NSLog相当于NSLog(@“%@”,BObj.x); %@表示你想打印一个复杂的对象。在这种情况下,这不是一个对象,而是一个简单的整数。 – Niko 2012-04-20 05:33:48

2

正如Chuck在评论中所说,这看起来不像真正的代码。你把x设置为10?如果它不在init方法中,或者不在init中调用的方法中,它将不会显示。而且你已经通过编辑使投诉无效 - 日志记录%d不会显示为空,它将显示为零。