2012-04-08 35 views
-1

我想比较,我从两种不同的方法得到的数据:从一个实例方法的第一个,并从一个类方法的第二个。我得到一个难以理解的警告和一个错误。问题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

应改为:不需要

if (self.frequency > [RadioStation maxFMFrequency]) 

自我解决类,如果按名称寻址。如果你想引用自我,你可以使用:

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

当我写这个我只得到错误按摩 – 2012-04-08 19:09:08

+0

@shaynagar在你发布你的“'chackFrequency'”方法的代码没有闭合大括号。如果你的实际代码是这样的,那么这将是一个问题。 – NJones 2012-04-08 19:14:59

0

也许你的错误如下:

[[self RadioStation] maxFMFrequency] 

[RadioStation maxFMFrequency] 
+0

当我写这我只得到了错误的按摩 – 2012-04-08 19:09:24

+0

错误可能是使用频度而不使您的if语句 – WhiteTiger 2012-04-08 19:22:56

+0

self.frequency你打电话,但实际上您尚未创建此变量 – WhiteTiger 2012-04-08 19:28:05

1

改变它,它是不会从你的帖子里明确对于波段和频率来自于价值观,所以我只是坚持他们用于测试目的init方法,这个代码工作得很好,当我呼吁这个类的alloc初始化:

@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 
+0

THX,其现在的工作的性质首先初始化 – 2012-04-09 08:40:33

+1

@shaynagar如果rdelmar的回答回答了您的问题,您应该将其标记为已接受的答案。 – NJones 2012-04-10 03:48:31