我正在尝试比较从两种不同方法获得的数据:第一种来自实例方法,第二种来自类方法。我得到一个难以理解的警告和一个错误。
这是界面:
@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
有谁知道我做错了什么?
谢谢!
答案 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]