我收到警告:实例方法'方法'正用于不在根类中的'Class'。
我在静态方法中调用此方法(在超类中定义)。当我执行代码时,我收到运行时错误:无法识别的选择器发送到类。
有可能解决这个问题吗?是否可以在静态方法中调用超类方法?
谢谢
修改:
儿童班:
@interface ProfileClass : GHAsyncTestCase {}
+ (void)testGHUnitSuccess;
@end
@implementation ProfileClass
+ (void)testGHUnitSuccess {
[self waitForStatus:kGHUnitWaitStatusSuccess timeout:10.0];
}
@end
GHAsyncTestCase是来自GHUnit框架的类。也许,不可能在静态方法中调用超类方法。如果没有,我将不得不以不同的方式解决它。
解:
我创建了超类的共享实例,并在静态方法中使用了它。
答案 0 :(得分:3)
简单的答案是否定的。
要调用实例方法,您必须具有要将消息发送到的类的实例。在静态方法中,您没有该类的实例。
因此,您需要将被调用的方法转换为静态方法 - 如果该方法不依赖于实例的任何值,或者您必须创建类的实例(alloc,init等),则该方法应该是可能的。静态方法。
如果没有看到您的代码,我们无法提供更具体的方法。
编辑: 编辑后,可以看出问题所在 在类方法(+(void)testGHUnitSuccess中 - 注意不是静态方法)self是没有实例方法的类。 因此,正如您所说,您需要通过类的实例替换self - 在本例中为共享实例。