0

我有两节课:

BaseClass : NSObject
AdvanceClass : BaseClass

在 AdvanceClass 我有一个初始化程序:

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

    return self;
}

然后当我打电话时得到 TRUE 时:

[myObject isKindOfClass:[BaseClass class]]

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

我在这里要做的是将 BaseClass 的所有属性与 bObj 对象的属性一起分配。我怎样才能做到这一点?

4

2 回答 2

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;
}
于 2012-06-27T13:45:22.363 回答
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;
    .
    .
    .
}

这是显而易见的解决方案,我很傻。

于 2012-06-27T14:37:28.337 回答