Objective-C中两种方法的比较问题

时间:2012-04-08 18:56:34

标签: objective-c

我正在尝试比较从两种不同方法获得的数据:第一种来自实例方法,第二种来自类方法。我得到一个难以理解的警告和一个错误。

这是界面:

@interface RadioStation : NSObject {

NSString *name;
double frequency;
char band;

}
+(double) maxFMFrequency;
-(void) chackFrequency;

@end

这是实施:

@implementation RadioStation

+(double) maxFMFrequency {

return 107.9;
}
-(void) chackFrequency {

    switch (band) {
        case 'F':
            if (self.frequency > [[self RadioStation] maxFMFrequency] ) //  in this line i get the warning and the error massage
                frequency=107.9;
            break;


@end

这是我得到的警告

instance method '-RadioStation' not found (return type defaults to 'id')

当我构建并运行程序时,我得到错误

Thread 1: signal SIGABRT

有谁知道我做错了什么?

谢谢!

3 个答案:

答案 0 :(得分:3)

应阅读:

if (self.frequency > [RadioStation maxFMFrequency] )

如果通过名称解决,则不需要自我来解决课程问题。如果你想引用自我,你可以使用:

if (self.frequency > [[self class] maxFMFrequency] )

答案 1 :(得分:1)

从你的帖子中不清楚band和frequency的值来自哪里,所以我只是把它们放在init方法中进行测试,当我在这个类上调用alloc init时这个代码运行正常:

@implementation RadioStation

-(id)init {
    if (self = [super init]) {
        band = 'F';
        frequency = 120;
        [self chackFrequency];
        return self;
    }else{
        return nil;
    }
}

+(double) maxFMFrequency {
    return 107.9;
}

-(void) chackFrequency {
    switch (band) {
        case 'F':
            if (frequency > [[self class] maxFMFrequency] )
                frequency=107.9;
            NSLog(@"%f",frequency);
            break;
    }
}
@end

答案 2 :(得分:0)

也许您的错误如下:

[[self RadioStation] maxFMFrequency]

更改它
[RadioStation maxFMFrequency]