2012-04-08 11 views
-1

2つの異なるメソッド(インスタンスメソッドの最初のメソッドとクラスメソッドの2番目のメソッド)から得られるデータを比較しようとしています。わかりにくい警告と1つのエラーが表示されます。Objective-Cの2つのメソッドを比較する際の問題

これはインターフェイスです:

@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

私がこれを書いたのはエラーマッサージだけです –

+0

@shaynagar "chackFrequency'メソッドを投稿したコードでは中括弧がありません。実際のコードがそのようなものなら、それは問題になります。 – NJones

0

おそらく、あなたのエラーは次のとおりです。

[RadioStation maxFMFrequency] 
+0

私はこれを書いたときにエラーメッセージ –

+0

しか得られませんが、if文で最初に初期化しないとエラーが発生する可能性があります – WhiteTiger

+0

self.frequency呼び出しても、実際にはこの変数のプロパティを作成していません – WhiteTiger

1

[[self RadioStation] maxFMFrequency] 

変更、それはそれはあなたのポストどこから明確ではありませんバンドと周波数の値は元々ありましたので、私はテスト目的で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 
+0

thx、 –

+1

@shaynagar rdelmarの答えがあなたの質問に答えた場合は、それを受け入れられた回答としてマークする必要があります。 – NJones