不兼容的指针类型从结果类型为'*'的函数返回**'

时间:2012-05-16 16:41:06

标签: objective-c ios

基本上,我有一个名为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'

2 个答案:

答案 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'];