objective c - Reenvío dinámico: suprima la advertencia de implementación incompleta
objective-c xcode (2)
Tengo una clase que expone algunos métodos, cuya implementación es proporcionada por un objeto interno.
Estoy usando la invocación hacia adelante para enviar en tiempo de ejecución el método llama al objeto interno, pero XCode se queja porque no puede encontrar una implementación de los métodos declarados.
Encontré algunas otras preguntas similares sobre SO, pero todas se resolvieron con un cambio de diseño.
No me refiero a tener una discusión sobre el diseño aquí, pero si alguien tiene alguna sugerencia al respecto, tengo una pregunta abierta sobre Code Review, que es más adecuada para este tipo de discusiones.
Mi pregunta aquí es si existe un método para desactivar la advertencia de Incomplete Implementation
en XCode.
Puede declarar los métodos en una interfaz de categoría de clase:
@interface MyClass (ForwardedMethods)
- (void)doSomething;
@end
(sin implementación para la categoría). Entonces Xcode ya no se quejará de "implementación incompleta".
Puede suprimir las advertencias de Incomplete Implementation
agregando
#pragma clang diagnostic ignored "-Wincomplete-implementation"
justo encima de la @implementation
Espero que esto ayude
EDITAR
Después de que me dijeron en los comentarios que esto no funcionó para alguien y descubrir la razón fue porque recibí una advertencia diferente. He jugado un poco y he podido resolver el problema, así que pensé que lo haría. Actualice esta respuesta para incluir la de ellos y para GCC
ignora. Así que para el problema para @Tony
lo siguiente debería funcionar
#pragma clang diagnostic ignored "-Wprotocol"
Para cualquiera que quiera saber la versión del compilador GCC
es
#pragma GCC diagnostic ignored "-Wprotocol"
#pragma GCC diagnostic ignored "-Wincomplete-implementation"
También diagnotstic ignores
que todos estos diagnotstic ignores
también se pueden hacer especificando la configuración por archivo yendo a XCODE Project >> Target >> Build Phases >> Compile Sources
y agregando una bandera de compilador para que solo pueda agregue -Wprotocol
o Wincomplete-implementation
o cualquier indicador de compilador que necesite.
Espero que esta actualización ayude a todos, si es necesario, actualizaré mi respuesta para incluir.
Editar 2
Estaba investigando un poco más sobre esto y encontré el Manual del usuario de Clang Compliler, así que pensé que esto sería interesante y útil para cualquier persona que aún tenga problemas en esta área.
También he encontrado otra forma en la que puedes usar estos #pragma diagnostic ignores
y es que puedes push
y pop
, así que si solo quisieras ignorar una sección particular del archivo y no toda, entonces podrías hacer lo siguiente.
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wmultichar"
// And pop the warning is gone.
char b = ''fa'';
#pragma clang diagnostic pop
Recuerde que todos estos #pragma
compile ignores se pueden usar con GCC
, así que lo anterior sería
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wmultichar"
// And pop the warning is gone.
char b = ''fa'';
#pragma GCC diagnostic pop
El push
y el pop
parecen funcionar con todos los diagnostic ignores
que he intentado hasta ahora.
Otro es
#pragma clang diagnostic ignored "UnresolvedMessage"
#pragma GCC diagnostic ignored "UnresolvedMessage"
El de suprimir las variables no utilizadas es
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-variable"
NSString *myUnusedVariable;
#pragma clang diagnostic pop
y siendo la versión GCC
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-variable"
NSString *myUnusedVariable;
#pragma GCC diagnostic pop
Un poco más para ignorar las advertencias de unvailableInDeploymentTarget
#pragma clang diagnostic push
#pragma ide diagnostic ignored "UnavailableInDeploymentTarget"
leftEdge.barTintColor = rightEdge.barTintColor = self.toolbar.barTintColor;
#pragma clang diagnostic pop
y realizar fugas en el selector
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[target performSelector:cancelAction withObject:origin];
#pragma clang diagnostic pop
y declaraciones desaprobadas
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
button = [[UIBarButtonItem alloc] initWithTitle:buttonTitle style:UIBarButtonItemStyleBordered target:self action:@selector(customButtonPressed:)];
#pragma clang diagnostic pop
Gracias a DanSkeel
puedes encontrar la lista completa aquí.