基本上,我有一个名为BaseObject的基类。第二类类称为RedObject,BlueObject。它们是BaseObject类的子类。
因此,在RedObject.h中,它具有:
#import "BaseObject.h"
@interface RedObject : BaseObject
在BlueObject.h中,它有:
#import "BaseObject.h"
@interface BlueObject : BaseObject
我还有一个名为MyObject的第三种类。在MyObject.h文件中,它具有:
#import "RedObject.h"
#import "BlueObject.h"
@interface MyObject : NSObject
-(id)init:(char)objectType;
在MyObject.m文件中,它具有:
-(id)init:(char)objectType
{
self = [super init];
switch (objectType)
{
case 'R':
{
return [[RedObject alloc]init]; // this is where the yellow warning message 1
}
case 'B':
{
BlueObject *blueObject = [[BlueObject alloc]init];
return blueObject; // this is where the yellow warning message 2
}
default:
break;
}
return self;
}
Waring message 1:不兼容的指针类型从结果类型为“MyObject *”的函数返回 RedObject '
Waring message 2:不兼容的指针类型从结果类型为“MyObject *”的函数返回 BlueObject _strong'
当我尝试从调用者类实例化MyObject实例时,它工作正常。我可以验证我已访问RedObject / BlueObject和BaseObject的所有属性。但不确定如何补救黄色警告。或者如果我错过了什么?
MyObject *myObject = [[MyObject alloc]init:'R']; // or 'B'
答案 0 :(得分:0)
根据发布的评论,特别是来自@kevboh的评论,我做了一些修改如下,似乎解决了我的问题。
在MyObject.h中:
//-(id)init:(char)objectType; //removed
-(id)getObject:(char)objectType; //added
在MyObject.m中:
//删除 - (id)init:(char)objectType方法
//添加了此方法
-(id)getObject:(char)objectType
{
switch (objectType)
{
case 'R':
{
return [[RedObject alloc]init]; //self;
}
case 'B':
{
BlueObject *object = [[BlueObject alloc]init];
return object;
}
default:
break;
}
return nil;
}
在调用者类中,使用:
MyObject *myObject = [[[MyObject alloc]init] getObject:'H'];
答案 1 :(得分:0)
为什么没有一个完成所有构造的类方法。
+(id)newObject:(char)objectType
{
switch (objectType)
{
case 'R':
return [[RedObject alloc]init]; //self;
case 'B':
BlueObject *object = [[BlueObject alloc]init];
return object;
default:
return [[MyObject alloc]init];
}
}
这将使用如下
MyObject *myObject = [MyObject newObject:'H'];