2009-02-27 11 views
0

Bazı obj-code kodum var, desteklenmeyen mesajları eklentiye göndermeyi planlıyorum. Ancak iletileri görmezden gelemiyorum. "- (id) forward: (SEL) selector: (marg_list) arglist;" onu çözecek ama değildi. Bir uyarı ve sonlandırma çağrısı almadan bu uygulamayı nasıl çalıştırabilirim?Hedefteki mesajları görmezden gelmek 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; 
} 

cevap

1

Aksine eklenti bu teslim yerine, arayan bunu yapmak için iyi olurdu. Onun yerine: myFractionsomeMsg selektör yanıt verirse

[myFraction someMsg: 99]; 

kontrol etmelidir:

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

-respondsToSelector: yöntem NSObject Protocol Reference tanımlanan, böylece MyFraction nesne NSObject devralmak gerektiğini değil dikkat edilir Object (veya NSObject protokolünü kendiniz uygulayın). Tabii ki, bu gerçekten en iyi uygulama zaten - Object sınıfını doğrudan sınıflandırma genellikle önerilmez.

+0

Doğrudan alt sınıflandırma Nesne, yalnızca OS X veya GNUStep'de hiçbir şey yapmaz. NSObject ve NSProxy hem kök düzeyinde nesnelerdir. Nesne aynı zamanda semantikleri tutmaz/serbest bırakmaz, dolayısıyla bunları NSObject tabanlı koleksiyonlara aktarır ve API'ler doğru şekilde çalışmayacaktır. –

İlgili konular