公共类没有已知的类方法?

时间:2014-05-08 18:24:22

标签: objective-c

您好我希望此代码是公共类:

+ (void) alcSubstract {
    NSLog(@"tes");
    if (alkOld == 0) {

    } else {
        Promille = 0;
        alkOld = alkOld - (0.1/3600);
        [self calculation];
    }
}

但现在[self calculation]出现错误 错误:没有已知的选择器计算方法...

计算如下:

- (void)calculation
{
    NSLog(@"Starting calcultion");
    if (Mann == true) {
        Promille = alkGramm/(0.7*gewicht);
    } else {
        Promille = alkGramm/(0.6*gewicht);
    }
    //NSLog(@"%f", Promille);
    promilleOut.textColor = [UIColor greenColor];
    if (Promille >= 1) {
        promilleOut.textColor = [UIColor yellowColor];
    } else if (Promille >= 1.5){
        promilleOut.textColor = [UIColor redColor];
    }
    promilleOut.text = [NSString stringWithFormat:@"%f", alkOld + Promille];
    alkOld = [promilleOut.text floatValue];
    [self timeCalc];
    alkGramm = 0;

}

`

2 个答案:

答案 0 :(得分:0)

您无法从类方法中调用实例方法。当你从类方法中引用self时,它会寻找另一个给定名称的类方法。

解决方案1:

calculation更改为类方法

+ (void)calculation

解决方案2

创建特定类的实例并使用它:

+ (void) alcSubstract
{
    NSLog(@"tes");
    if (alkOld == 0)
    {

    }
    else
    {
        Promille = 0;
        alkOld = alkOld - (0.1/3600);
        YourClass *obj = [[YourClass alloc] init]; // Example only, make the object a global or static one
        [obj calculation];
    }
}

答案 1 :(得分:0)

- (void)calculation将计算声明为实例方法(' - '指定实例方法)

+(void)alcSubtract声明alcSubtract是一个类方法(' +'指定一个类方法。

在类方法alcSubtract中,self指的是特定于您定义的类的类Class的实例。 [self calculation]尝试调用该类的方法(类方法)。但是,由于calculation是实例方法,而不是类方法,因此会出现编译器错误。

通过查看calculation中的代码,我的猜测是alcSubtract应该是一个实例方法。或者,应将当前实例方法的几种方法更改为类方法。