игнорирование сообщений в цели C - PullRequest
0 голосов
/ 27 февраля 2009

У меня есть некоторый код obj-c, я планирую отправлять неподдерживаемые сообщения в плагине. Однако я не могу игнорировать сообщения. Я подумал: «- (id) forward: (SEL) селектор: (marg_list) arglist;» решил бы это, но это не так. Как мне запустить это приложение полностью, не получая предупреждения и не вызывая вызов?

#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 Ответ

1 голос
/ 28 февраля 2009

Вместо того, чтобы передать это в плагин, было бы лучше сделать это в вызывающем . Вместо:

[myFraction someMsg: 99];

Вы должны проверить, отвечает ли myFraction на селектор someMsg:

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

Метод -respondsToSelector: определен в Ссылка на протокол NSObject , поэтому обратите внимание, что объект MyFraction должен наследоваться от NSObject, а не Object (или иначе реализовать NSObject протокол сам). Конечно, в любом случае, это действительно лучшая практика - прямое наследование класса Object обычно не рекомендуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...