在目标c中将基类指针指向派生类

Mug*_*nth 0 iphone objective-c

我有一个名为ModelBase的基类,我有一个名为"Person"的派生类.现在在人的init方法中,我有类似的东西

-(Person*) init {
     if(self = [super init])
         return self;

     return nil; 
}
Run Code Online (Sandbox Code Playgroud)

然而,Objective C抱怨不兼容的Objective-C类型初始化'struct ModelBase*',期望'struct Person*'.我只是用[super init]初始化self,它正在初始化一个派生类的基类指针.

我错过了什么?

Jas*_*man 5

您是否声明要返回的ModelBase init方法(ModelBase*)?如果是这样,请将其更改为return(id).您会注意到Cocoa中的大多数初始值设定项返回(id)是出于这个原因.

代替

- (ModelBase*)init;
Run Code Online (Sandbox Code Playgroud)

你要

- (id)init;
Run Code Online (Sandbox Code Playgroud)