Objective-C:实例方法“方法”;正在“Class”上使用;不在根类中

发布于 2024-12-14 09:09:12 字数 583 浏览 0 评论 0原文

我收到警告:实例方法“方法”正在不在根类中的“类”上使用。

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

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

谢谢

编辑

子类:

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

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

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

解决方案

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

I am getting warning: Instance method 'method' is being used on 'Class' which is not in the root class.

I am calling this method (which is defined in the super class) in the static method. When I execute the code, I get runtime error: unrecognized selector sent to class.

Is it possible to solve this problem? Is it possible to call super class method inside the static method?

Thank you

EDIT:

Child class:

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

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

GHAsyncTestCase is class from GHUnit framework. Maybe, it is not possible to call the super class method in static method. If not, I will have to solve it in different way.

SOLUTION:

I have created shared instance of my super class and have used it in the static methods.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

沦落红尘 2024-12-21 09:09:12

简单的答案是否定的。

要调用实例方法,您必须有一个要向其发送消息的类的实例。在静态方法中,您没有该类的实例。

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

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

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

Simple answer is no.

To call an instance method you must have an instance of the class to send the message to. In a static method you do not have an instance of the class.

Thus you either need to convert the called method to a static method - which should be possible if the method does not depend on any values of the instance or you have to create an instance of the class (alloc, init etc) in the static method.

We cannot provide a more concrete way out without seeing your code.

EDIT:
After your edit it can bee seen what the issue is.
In a class method (+ (void)testGHUnitSuccess - note not a static method) self is the class which does not have the instance methods.
Thus as you say you need to replace self by an instance of the class - in this case a shared instance.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文