Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
objective-c派生类可能不响应基类方法_Objective C_Compiler Warnings - Fatal编程技术网

objective-c派生类可能不响应基类方法

objective-c派生类可能不响应基类方法,objective-c,compiler-warnings,Objective C,Compiler Warnings,我从第三方类派生,当我尝试调用基类中的方法时,我得到x可能不会响应y编译器警告 如何删除警告 复制: @interface ThirdPartyBaseClass : NSObject {} +(id)build; -(void)doStuff; @end @implementation ThirdPartyBaseClass +(id) build{ return [[[self alloc] init] autorelease]; } -(void)doStuff{ } @end

我从第三方类派生,当我尝试调用基类中的方法时,我得到x可能不会响应y编译器警告

如何删除警告

复制:

@interface ThirdPartyBaseClass : NSObject {}
+(id)build;
-(void)doStuff;
@end

@implementation ThirdPartyBaseClass
+(id) build{
    return [[[self alloc] init] autorelease];
}
-(void)doStuff{ 
}
@end

@interface MyDerivedClass : ThirdPartyBaseClass {}
+(id)buildMySelf;
@end

@implementation MyDerivedClass
+(id)buildMySelf{
    self = [ThirdPartyBaseClass build];
    [self doStuff]; // compiler warning here - 'MyDerivedClass' may not respond to '+doStuff'
return self;
}
@end

谢谢

您是否尝试过将
构建我自己
更改为:

+(id)buildMySelf{
      self = [MyDerivedClass build];
      [self doStuff];
      return self;
}

使用
[ThirdPartyBaseClass构建]
生成第三方BaseClass的实例,而不是MyDerivedClass的实例。您是否尝试将
BuildMyMy更改为:

+(id)buildMySelf{
      self = [MyDerivedClass build];
      [self doStuff];
      return self;
}
使用
[ThirdPartyBaseClass构建]
生成第三方BaseClass的实例,而不是MyDerivedClass的实例,而不是MyDerivedClass的实例-(void)doStuff是一个实例方法,但您是在编译器认为是类的情况下调用它的。 编译器认为self被类型化为类,而不是
ThirdPartyBaseClass
对象

试一试

-(void)doStuff
是一个实例方法,但您是在编译器认为是类的情况下调用它的。 编译器认为self被类型化为类,而不是
ThirdPartyBaseClass
对象

试一试

在类方法(前面有“+”)中,“self”不是类的实例;'“self”是类对象,它只响应类方法,而不响应实例方法。如果您正在构建一个实例,以便可以对其调用
doStuff
,并返回它,则需要使用单独的变量:

+ (id) buildMySelf
{
   MyDerivedClass *myDerivedClassInstance;

   myDerivedClassInstance = [self build];
   [myDerivedClassInstance doStuff];

   return myDerivedClassInstance;
}
在类方法(前面有“+”)中,“self”不是类的实例;'“self”是类对象,它只响应类方法,而不响应实例方法。如果您正在构建一个实例,以便可以对其调用
doStuff
,并返回它,则需要使用单独的变量:

+ (id) buildMySelf
{
   MyDerivedClass *myDerivedClassInstance;

   myDerivedClassInstance = [self build];
   [myDerivedClassInstance doStuff];

   return myDerivedClassInstance;
}

这仍然会产生“可能不响应…”警告这仍然会产生“可能不响应…”警告