-1

2 つの異なるメソッドから取得したデータを比較しようとしています。1 つはインスタンス メソッドから、もう 1 つはクラス メソッドから取得したものです。理解できない警告が 1 つとエラーが 1 つ表示されます。

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

@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

私が間違っていることを誰かが知っていますか?

ありがとう!

4

3 に答える 3

3

読むべき:

if (self.frequency > [RadioStation maxFMFrequency] )

名前でアドレス指定する場合、クラスのアドレス指定に Self は必要ありません。自分自身を参照したい場合は、次を使用できます。

if (self.frequency > [[self class] maxFMFrequency] )
于 2012-04-08T18:59:27.167 に答える
1

バンドと周波数の値がどこから来たのかあなたの投稿からは明らかではないので、テスト目的で 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
于 2012-04-08T21:57:51.617 に答える
0

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

[[self RadioStation] maxFMFrequency]

で変更します

[RadioStation maxFMFrequency]
于 2012-04-08T19:01:45.490 に答える