objective c style Existe uma maneira de suprimir avisos no Xcode?




uialertcontroller preferred style (8)

existe uma maneira mais simples de suprimir avisos de variáveis ​​não usadas:

#pragma unused(varname)

EDIT: fonte: http://www.cocoadev.com/index.pl?XCodePragmas

ATUALIZAÇÃO: Eu vim com uma nova solução, mais robusta

  1. Abra a guia Projeto> Editar Destino Ativo> Construir.
  2. Em User-Defined : localize (ou crie se você não encontrar um) a chave: GCC_WARN_UNUSED_VARIABLE defina como NO .

EDIT-2 Exemplo:

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

o compilador mostra o aviso de variável não usada para ok .

Solução:

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

PS: Você também pode definir / redefinir outro aviso: GCC_WARN_ABOUT_RETURN_TYPE : YES/NO

Existe uma maneira de suprimir avisos no Xcode?

Por exemplo, estou chamando um método não documentado e, como o método não está no cabeçalho, recebo um aviso sobre a compilação. Eu sei que posso adicioná-lo ao meu cabeçalho para parar o aviso, mas eu estou querendo saber se há uma maneira diferente de adicioná-lo ao cabeçalho (para que eu possa manter os cabeçalhos limpos e padrão) para suprimir o aviso? Um pragma ou algo assim?


Suprimir esse aviso específico não é seguro. O compilador precisa conhecer os tipos de argumentos e retornar a um método para gerar o código correto.

Por exemplo, se você está chamando um método como este

[foo doSomethingWithFloat: 1.0];

que leva um float, e não há nenhum protótipo visível, então o compilador irá adivinhar que o método leva um double, não um float. Isso pode causar falhas e valores interpretados incorretamente. No exemplo acima, em uma pequena máquina endian como as máquinas intel, o método receptor veria 0 passado, não 1.

Você pode ler por que nos documentos AB3 i386 , ou você pode apenas corrigir seus avisos. :-)


Crie um novo arquivo de cabeçalho separado chamado 'Undocumented.h' e adicione-o ao seu projeto. Em seguida, crie um bloco de interface para cada classe para a qual você deseja chamar funções não documentadas e atribua a cada uma delas uma categoria de '(não documentado)'. Em seguida, inclua apenas esse arquivo de cabeçalho em seu PCH. Dessa forma, seus arquivos de cabeçalho originais permanecem limpos, há apenas um outro arquivo para manter, e você pode comentar uma linha na sua PCH para reabilitar todos os avisos novamente.

Eu também uso este método para funções depreciadas em 'Depreciated.h' com uma categoria de '(Depreciated)'.

A melhor parte é que você pode seletivamente ativar / desativar avisos individuais, comentando ou descomentando os protótipos individuais.


Para se livrar do aviso: tente criar uma interface de categoria para o objeto em questão

@interface NSTheClass (MyUndocumentedMethodsForNSTheClass)

-(id)theUndocumentedMethod;
@end
...

@implementation myClass : mySuperclass

-(void) myMethod {
...
   [theObject theUndocumentedMethod];
...
}

Como um aparte, aconselho vivamente a não chamar métodos não documentados no código de expedição. A interface pode e vai mudar, e será sua culpa.


Com Objective-C, vários erros graves aparecem apenas como avisos. Não só nunca desabilito avisos, como normalmente ligo "Tratar avisos como erros" (-Werror).

Todo tipo de aviso em seu código pode ser evitado fazendo-se as coisas corretamente (normalmente, lançando objetos no tipo correto) ou declarando protótipos quando você precisar deles.



Para desativar os avisos em uma base por arquivo, usando o Xcode 3 e o llvm-gcc-4.2, você pode usar:

#pragma GCC diagnostic ignored "-Wwarning-flag"

Onde nome de aviso é algum sinalizador de aviso do gcc.

Isso substitui quaisquer sinalizadores de aviso na linha de comando. Não funciona com todos os avisos embora. Adicione -fdiagnostics-show-option às suas CFLAGS e você poderá ver qual sinalizador pode ser usado para desabilitar esse aviso.


Para o gcc você pode usar

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

Você pode aprender sobre o pragma do GCC aqui e obter o código de aviso de um aviso no Navegador de Relatórios (Comando + 9), selecionar a compilação mais avançada, expandir o log (o botão '=' à direita) e rolar para o embaixo e lá seu código de aviso está entre colchetes como este [-Wshadow-ivar]

Para clang você pode usar

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






suppress-warnings