2011-11-08 2 views
1

警告:ルートにない 'Class'でインスタンスメソッド 'method'が使用されていますクラス。Objective-C:ルートクラスにない 'Class'でインスタンスメソッド 'method'が使用されています

私はこのメソッド(スーパークラスで定義されています)を静的メソッドで呼び出しています。コードを実行すると、ランタイムエラーが発生します。認識できないセレクターがクラスに送信されました。

この問題を解決することは可能ですか?静的メソッド内でスーパークラスメソッドを呼び出すことは可能ですか?

子供クラス:

@interface ProfileClass : GHAsyncTestCase {} 
+ (void)testGHUnitSuccess; 
@end 

@implementation ProfileClass 
+ (void)testGHUnitSuccess { 
    [self waitForStatus:kGHUnitWaitStatusSuccess timeout:10.0]; 
} 
@end 

GHAsyncTestCaseがGHUnitフレームワークからのクラスです。

はあなたに

EDITありがとうございましたたぶん、静的メソッドでスーパークラスメソッドを呼び出すことはできません。そうでなければ、私は別の方法でそれを解決しなければならないでしょう。

SOLUTION

私はスーパークラスの共有インスタンスを作成し、静的メソッドでそれを使用しています。

+2

何かを理解するためにコードを確認する必要があります。 – BoltClock

答えて

3

簡易返答はありません。

インスタンスメソッドを呼び出すには、メッセージを送信するクラスのインスタンスが必要です。静的メソッドでは、クラスのインスタンスはありません。

したがって、呼び出されたメソッドを静的メソッドに変換する必要があります。メソッドがインスタンスの値に依存しない場合、またはクラスのインスタンスを作成する必要がある場合(alloc、initなど)静的メソッドで。

コードを見ることなく、より具体的な方法を提供することはできません。

編集: 編集後、問題の内容を確認することができます。
クラスメソッド(+(void)testGHUnitSuccess - 静的メソッドには注意してください)selfは、インスタンスメソッドを持たないクラスです。 したがって、クラスのインスタンス(この場合は共有インスタンス)でselfを置き換える必要があるとします。

+0

親クラスのSharedInstanceを使用して解決しました –

+2

"クラスメソッドで... selfは定義されていないため、メッセージをnilに送信しています。"違う。 'nil'へのメッセージは決して認識できないセレクター例外を引き起こしません。 'self' *はObjective-Cのすべてのメソッドで定義されています。クラスメソッドでは、 'self'はメッセージが送られたクラスです。 – jlehr