【问题标题】:Accessing Sub class member from base class in objective c从目标c中的基类访问子类成员
【发布时间】:2012-04-20 04:51:35
【问题描述】:

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

例如..

我有基类 classA 和子类 ClassB。我试图从基类 ClassA 访问 classB 成员变量说 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).

【问题讨论】:

  • 您的代码在语法上根本无效。如果您不给我们真正的代码来查看,任何想要帮助的人都必须玩 20 个问题来解决这个问题。
  • @chuck:我粘贴了上面的代码,这是我实际代码的副本。我刚刚替换为classA和classB。就这样。你能给我一个例子来从基类访问子类对象的值吗..
  • 不,那也不会编译。

标签: objective-c xcode oop inheritance


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    试试这个:NSLog(@"%d", BObj.x);

    【讨论】:

    • oh..thanks..but pblm is not with that..它没有给出任何警告或错误。它只是打印空值
    • 确实,这是因为语法是正确的。你的 NSLog 相当于 NSLog(@"%@", BObj.x); %@ 表示您要打印一个复杂的对象。在这种情况下,这不是一个对象,而是一个简单的整数。
    猜你喜欢
    • 2011-02-03
    • 1970-01-01
    • 2018-10-05
    • 2022-11-30
    • 1970-01-01
    • 2011-01-27
    • 2011-11-03
    • 2012-10-18
    相关资源
    最近更新 更多