programar partes objective librerias lenguaje introduccion funciona español empezar con como objective-c xcode cocoa cocoa-touch suppress-warnings

objective-c - partes - xcode 9 español



¿Hay alguna manera de suprimir las advertencias en Xcode? (9)

Para gcc puedes usar

#pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wshadow-ivar" // your code #pragma GCC diagnostic pop

Aquí puede aprender sobre GCC pragma y obtener el código de advertencia de una advertencia ir al Navegador de registros (Comando + 7), seleccionar la construcción superior, expandir el registro (el botón ''='' a la derecha) y desplazarse hasta la abajo y allí su código de advertencia está entre corchetes como este [-Wshadow-ivar]

Para clang puedes usar

#pragma clang diagnostic push #pragma clang diagnostic ignored "-Wshadow-ivar" // your code #pragma clang diagnostic pop

¿Hay alguna manera de suprimir las advertencias en Xcode?

Por ejemplo, estoy llamando a un método no documentado y dado que el método no está en el encabezado, aparece una advertencia al compilar. Sé que puedo agregarlo a mi encabezado para detener la advertencia, pero me pregunto si hay una forma más que agregarlo al encabezado (para que pueda mantener los encabezados limpios y estándar) para suprimir la advertencia. Un pragma o algo?


Con Objective-C, varios errores graves solo aparecen como advertencias. No solo nunca deshabilito las advertencias, normalmente enciendo "Tratar advertencias como errores" (-Werror).

Cada tipo de advertencia en su código se puede evitar haciendo las cosas correctamente (normalmente al proyectar objetos al tipo correcto) o declarando prototipos cuando los necesite.


Cree un nuevo archivo de encabezado separado llamado ''Undocumented.h'' y agréguelo a su proyecto. Luego, cree un bloque de interfaz para cada clase a la que desee llamar funciones no documentadas y otorgue a cada una una categoría de ''(no documentada)''. Luego solo incluya ese archivo de encabezado en su PCH. De esta manera, sus archivos de encabezado originales permanecen limpios, solo hay otro archivo para mantener, y puede comentar una línea en su PCH para volver a habilitar todas las advertencias.

También uso este método para funciones depreciadas en ''Depreciated.h'' con una categoría de ''(Depreciados)''.

la mejor parte es que puede habilitar / deshabilitar selectivamente las advertencias individuales comentando o descomentando los prototipos individuales.


Para desactivar las advertencias por archivo, usando Xcode 3 y llvm-gcc-4.2 puede usar:

#pragma GCC diagnostic ignored "-Wwarning-flag"

Donde el nombre de advertencia es un indicador de advertencia de gcc.

Esto anula cualquier señal de advertencia en la línea de comando. Sin embargo, no funciona con todas las advertencias. Agregue -fdiagnostics-show-option a su CFLAGS y podrá ver qué indicador puede usar para desactivar esa advertencia.


Para deshacerse de la advertencia: intente crear una interfaz de categoría para el objeto en cuestión

@interface NSTheClass (MyUndocumentedMethodsForNSTheClass) -(id)theUndocumentedMethod; @end ... @implementation myClass : mySuperclass -(void) myMethod { ... [theObject theUndocumentedMethod]; ... }

Como comentario adicional, recomiendo encarecidamente no llamar a los métodos no documentados en el código de envío. La interfaz puede cambiar y cambiará, y será tu culpa.


Para eliminar una advertencia para un archivo individual, haga lo siguiente:

selecciona el archivo en el proyecto xcode. presione obtener información ir a la página con opciones de compilación ingresar -Wno- para anular una advertencia:

-no-

p.ej

-Wno-sin usar-parámetro

Puede obtener el nombre de la advertencia si mira en la configuración del proyecto, mire las advertencias de GCC ubicadas en la parte inferior de la página de la pestaña de compilación, haciendo clic en cada advertencia que le dirá el nombre del parámetro de advertencia:

p.ej

Avisar siempre que un parámetro de función no se use aparte de su declaración. [GCC_WARN_UNUSED_PARAMETER, -Wunused-parameter]


Suprimir esa advertencia particular no es seguro. El compilador necesita saber los tipos de argumentos y regresa a un método para generar el código correcto.

Por ejemplo, si llamas a un método como este

[foo doSomethingWithFloat: 1.0];

eso toma un flotador, y no hay un prototipo visible, entonces el compilador adivinará que el método toma un doble, no un flotador. Esto puede causar bloqueos y valores incorrectamente interpretados. En el ejemplo anterior, en una pequeña máquina endian como las máquinas intel, el método del receptor vería 0 pasado, no 1.

Puede leer por qué en los documentos ABI i386 , o puede simplemente corregir sus advertencias. :-)


hay una forma más sencilla de suprimir las advertencias de variables no utilizadas :

#pragma unused(varname)

EDITAR: fuente: http://www.cocoadev.com/index.pl?XCodePragmas

ACTUALIZACIÓN: encontré una nueva solución, una más robusta

  1. Abra la pestaña Proyecto> Editar destino activo> Crear.
  2. En User-Defined : encuentre (o cree si no encuentra uno) la clave: GCC_WARN_UNUSED_VARIABLE en NO .

EDIT-2 Ejemplo:

BOOL ok = YES; NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);

el compilador muestra la advertencia de la variable no utilizada para ok .

Solución:

BOOL ok = YES; #pragma unused(ok) NSAssert1(ok, @"Failed to calculate the first day the month based on %@", self);

PD: también puede configurar / restablecer otra advertencia: GCC_WARN_ABOUT_RETURN_TYPE : YES/NO