Desativar aviso de método de instância não encontrado
-
14-12-2019 - |
Pergunta
Atualmente estou trabalhando em um NSProxy
subclasse que intercepta certas mensagens e nunca as encaminha para ninguém, apenas as processa, portanto, esses métodos nunca existem realmente.E aí vem o problema, obviamente o compilador começa a reclamar da falta de implementações de métodos e não consigo descobrir como pará-lo, adicionar métodos stub à interface apenas para fazer o compilador calar a boca não funciona porque os métodos são formados arbitrariamente e não os conheço antecipadamente (para ser um pouco mais específico, estou pedindo esse projeto).
Idealmente, eu gostaria de dizer ao compilador que ele não deveria fazer nenhuma verificação de método para esta classe específica, mas como isso parece bastante improvável, eu também ficaria feliz por um #pragma
ou de qualquer outra forma (que não inclui desligar o compilador para cada aviso em todo o projeto/arquivo!)
Solução
Suas instruções switch não são realmente arbitrárias, elas apenas podem ter um comprimento arbitrário.Para um amplo número de comprimentos, você poderia ir em frente e declará-los para o benefício do compilador (e você obteria a verificação de erros, o que não aconteceria se você apenas desativasse o aviso).Por exemplo:
typedef void (^ObjCCaseBlock)();
@interface NSObject ()
- (id)switch;
- (void)case:(NSString*)a :(ObjCCaseBlock)b;
- (void)case:(NSString*)a :(ObjCCaseBlock)b case:(NSString*)a :(ObjCCaseBlock)b;
- (void)case:(NSString*)a :(ObjCCaseBlock)b case:(NSString*)a :(ObjCCaseBlock)b case:(NSString*)a :(ObjCCaseBlock)b;
@end
Repita para quantos níveis forem possíveis (e você poderá adicionar níveis se encontrar algum problema).É um pouco tedioso, mas não é difícil.