2010-08-12 4 views
1

У меня есть класс, который маршрутизирует много сообщений во внутренний экземпляр компонента. Таким образом, класс имеет только определение метода, но не реализация. Как я могу подавить эти предупреждения для этих динамических методов?Как подавить Objective-C предупреждение «неполная реализация класса« SomeClass »?

Update

Мой пример кода:

@interface SomeClass : NSObject 
{ 
} 
- (void)mssageA:(id)value1 additionalOption:(id)value2; 
- (void)mssageB:(id)value1 additionalOption:(id)value2; 
- (void)mssageC:(id)value1 additionalOption:(id)value2; 
@end 
@implementation SomeClass 
- (id)forwardingTargetForSelector:(SEL)aSelector 
{ 
    if([email protected](mssageA:additionalOption:))  return innerComponentInstance; 
    if([email protected](mssageB:additionalOption:))  return innerComponentInstance; 
    if([email protected](mssageC:additionalOption:))  return innerComponentInstance; 

    return [super forwardingTargetForSelector:aSelector]; 
} 
@end 
+0

Вы можете рассмотреть возможность использования протокола вместо класса здесь , Но все же, хороший вопрос (потому что я думаю, что так работают внутренние реализации, например NSNumber ...) – jtbandes

+0

Если вы не хотите создавать формальный протокол, просто используйте категорию для определения методов. Когда вы это делаете, компилятор не жалуется на то, реализованы они или нет (называется неофициальным протоколом). –

+0

Спасибо за ответ, но я не могу понять, как использовать протокол в этом случае. Может быть, мой вопрос непонятен. Я изменил свой вопрос. Или я могу получить образец для применения протокола для этого? – Eonil

ответ

1

Я думаю, что реализация протокола может выглядеть следующим образом

@protocol SomeProtocol 

@optional 
- (void)mssageA:(id)value1 additionalOption:(id)value2; 
- (void)mssageB:(id)value1 additionalOption:(id)value2; 
- (void)mssageC:(id)value1 additionalOption:(id)value2; 
@end 

@interface SomeClass : NSObject <SomeProtocol> 
{ 
} 

@implementation SomeClass 
- (id)forwardingTargetForSelector:(SEL)aSelector 
{ 
    if([email protected](mssageA:additionalOption:))  return innerComponentInstance; 
    if([email protected](mssageB:additionalOption:))  return innerComponentInstance; 
    if([email protected](mssageC:additionalOption:))  return innerComponentInstance; 

    return [super forwardingTargetForSelector:aSelector]; 
} 
@end 
+0

Мне кажется, вам нужен @end в конце протокола, но в остальном выглядит хорошо. –

+0

@optional look содержит значение реализаций, которые необходимо проверить перед использованием с помощью 'responsesToSelector:'. У меня неправильное понимание ключевого слова @optional? – Eonil

+0

ой, конечно, я просто забыл @end, ленивый. Лучше будет проверять ответы на запрос. Вы можете это сделать - так я думаю - без риска столкновения – Erle

Смежные вопросы