2009-02-27 1 views
0

obj-cコードがあります。プラグインでサポートされていないメッセージを送信する予定です。しかし、私はメッセージを無視するように思えない。私は " - (id)forward:(SEL)selector :(marg_list)arglist;"と思った。それを解決するだろうが、それはない。どのように私は警告と終了呼び出しを取得せずに、このアプリを完全に実行させるのですか?目的のCでメッセージを無視する

#import <stdio.h> 
#import <objc/Object.h> 

//------- @interface section ------- 

@interface Fraction: Object 
{ 
    int numerator; 
    int denominator; 
} 

-(void) print; 
-(void) setNumerator: (int) n; 
-(void) setDenominator: (int) d; 
-(id)  forward: (SEL) selector: (marg_list) arglist; 

@end 

//------- @implementation section ------- 


@implementation Fraction; 
-(void) print 
{ 
    printf (" %i/%i ", numerator, denominator); 
} 

-(void) setNumerator: (int) n 
{ 
    numerator = n; 
} 

-(void) setDenominator: (int) d 
{ 
    denominator = d; 
} 

-(id) forward: (SEL) selector: (marg_list) arglist 
{ 
    return nil; 
} 

@end 

//------- program section ------- 


int main (int argc, char *argv[]) 
{ 
    Fraction *myFraction; 

    // Create an instance of a Fraction 

    myFraction = [Fraction alloc]; 
    myFraction = [myFraction init]; 

    // Set fraction to 1/3 

    [myFraction setNumerator: 1]; 
    [myFraction setDenominator: 3]; 

    // Display the fraction using the print method 

    printf ("The value of myFraction is:"); 
    [myFraction print]; 
    printf ("\n"); 
    [myFraction someMsg: 99]; 
    [myFraction free]; 
    printf("end"); 
    return 0; 
} 

答えて

1

ではなくプラグインでこれを手渡し、それは呼び出し側でそれを行うのがベストでしょう。代わりに:

if ([myFraction respondsToSelector:@selector(someMsg:)]) { 
    [myFraction someMsg: 99]; 
} 

-respondsToSelector:方法はNSObject Protocol Referenceで定義されているので、あなたのMyFractionオブジェクトは、NSObjectから継承する必要がないことに注意してください。

[myFraction someMsg: 99]; 

あなたはsomeMsgセレクタにmyFraction応答があればチェックする必要がありますObject(またはNSObjectプロトコルを実装してください)。とにかく、これは実際にはベストプラクティスです。Objectクラスを直接サブクラス化することは一般的にお勧めできません。

+0

オブジェクトを直接的にサブクラス化することは、単に落胆されるだけではありません。実際にはOS XやGNUStepでは何も行いません。 NSObjectとNSProxyはどちらもルートレベルのオブジェクトです。 Objectはセマンティクスを保持/解放しないので、NSObjectベースのコレクションとAPIにそれらを渡すことは正しく機能しません。 –

関連する問題