如何使用BaseClass对象定义初始化程序以填充BaseClass属性?

时间:2012-06-27 13:42:23

标签: objective-c ios

我有两个班级:

BaseClass : NSObject
AdvanceClass : BaseClass

在AdvanceClass中我有一个初始化器:

-(id)initWithBaseObject:(BaseClass *)bObj
{
    if(self = [super init]) {
        self = (AdvanceClass*)bObj;
    }

    return self;
}

然后当我打电话时,我得到了正确的结果:

[myObject isKindOfClass:[BaseClass class]]

为什么呢?我正在将bObj转换为AdvanceClass对象。

我想要做的是从BaseClass中分配来自bObj对象的属性的所有属性。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

-(id)initWithBaseObject:(BaseClass *)bObj
{
    if(self = [super init]) {
        self = (AdvanceClass*)bObj; // this line of code discards the self = [super init]; and makes self a reference to a casted BaseClass object
        self.property1 = bObj.property1; // this is what you need to do for each property and remove the line with the cast
    }

    return self;
}

答案 1 :(得分:0)

我刚刚意识到最好的方法是在BaseClass中编写一个公共方法,然后从初始化程序中调用它。在这种情况下,你只能写一次,它只是编辑。

-(id)initWithBaseObject:(BaseClass *)bObj
{
    if(self = [super init]) {
        [self setBaseProperties:bObj];
    }

    return self;
}

在BaseClass.m

-(void)setBaseProperties:(BaseClass*)bObj
{
    _prop1 = bObj.prop1;
    _prop2 = bObj.prop2;
    .
    .
    .
}

这是显而易见的解决方案,愚蠢的我。