我有两个班级:
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对象的属性的所有属性。我怎么能这样做?
答案 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;
.
.
.
}
这是显而易见的解决方案,愚蠢的我。