Objective c 如何在目标C中的类方法上使用self

Objective c 如何在目标C中的类方法上使用self,objective-c,cordova,phonegap,Objective C,Cordova,Phonegap,我正在尝试制作一个定制的Cordova插件,我想在Objective-C中创建一个调用javascript函数alert(“text”)的方法 我通常就是这样做的,而且效果很好 - (void)myMethod:(CDVInvokedUrlCommand*)command { [self.commandDelegate evalJs:@"alert('text');"]; } 问题是我需要使用类方法做同样的事情。如果我将-更改为+,则会收到一条错误消息 + (void)myMethod

我正在尝试制作一个定制的Cordova插件,我想在Objective-C中创建一个调用javascript函数alert(“text”)的方法

我通常就是这样做的,而且效果很好

- (void)myMethod:(CDVInvokedUrlCommand*)command
{
    [self.commandDelegate evalJs:@"alert('text');"];
}
问题是我需要使用类方法做同样的事情。如果我将-更改为+,则会收到一条错误消息

+ (void)myMethod:(CDVInvokedUrlCommand*)command
{
    [self.commandDelegate evalJs:@"alert('text');"];
}

这样想,;一个实例就像一辆汽车,而这个类就像制造汽车的工厂

每辆车都有不同的司机(代表),但工厂无法接触到每辆车的司机,除非他们专门设计了一种进入方式(比如,通过On Star)


所以,这就是你的问题。您正在尝试从实例范围之外访问实例状态。在类方法中,
self
指的是类,而不是任何特定实例


解决方案可以是以下几种之一。你可以用一个单身汉;例如,在您的程序中全局使用的该类的单个实例。

它可能有助于实际告诉我们错误消息是什么……错误是“预期标识符”,谢谢您的类比。我现在理解了这个问题,我也得到了您提出的解决方案,即创建一个全局变量来表示类。我刚开始学习Objective-C,所以我要试着找出如何做到这一点。@DavidMarcus“类”和“实例”的概念让每个人在开始使用任何OO语言时都感到困惑。您将遇到的另一个问题是自动实例化。也就是说,如果您有一个XIB文件,加载XIB的行为会导致创建一组实例。因此,创建一个新实例并不合适。您必须使用系统提供的机制来获取未加载的实例。感谢您的提醒。因此,类方法中的
self
基本上就像引用静态方法一样?@DanielLizik。关键的区别在于Objective-C类方法可以被重写和/或Swizzle,而真正的静态方法则不是这样。