Objective-C:实例方法'方法'用于不在根类中的'Class'

时间:2011-11-08 09:36:14

标签: objective-c static-methods superclass

我收到警告:实例方法'方法'正用于不在根类中的'Class'。

我在静态方法中调用此方法(在超类中定义)。当我执行代码时,我收到运行时错误:无法识别的选择器发送到类

有可能解决这个问题吗?是否可以在静态方法中调用超类方法?

谢谢

修改

儿童班:

@interface ProfileClass : GHAsyncTestCase {}
+ (void)testGHUnitSuccess;
@end

@implementation ProfileClass
+ (void)testGHUnitSuccess {
    [self waitForStatus:kGHUnitWaitStatusSuccess timeout:10.0];
}
@end

GHAsyncTestCase是来自GHUnit框架的类。也许,不可能在静态方法中调用超类方法。如果没有,我将不得不以不同的方式解决它。

我创建了超类的共享实例,并在静态方法中使用了它。

1 个答案:

答案 0 :(得分:3)

简单的答案是否定的。

要调用实例方法,您必须具有要将消息发送到的类的实例。在静态方法中,您没有该类的实例。

因此,您需要将被调用的方法转换为静态方法 - 如果该方法不依赖于实例的任何值,或者您必须创建类的实例(alloc,init等),则该方法应该是可能的。静态方法。

如果没有看到您的代码,我们无法提供更具体的方法。

编辑: 编辑后,可以看出问题所在 在类方法(+(void)testGHUnitSuccess中 - 注意不是静态方法)self是没有实例方法的类。 因此,正如您所说,您需要通过类的实例替换self - 在本例中为共享实例。