Estou trabalhando em alguns exercícios e recebi um aviso informando:
A conversão implícita perde a precisão do número inteiro: 'NSUInteger' (também conhecido como 'não assinado longo') para 'int'
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
@autoreleasepool {
NSArray *myColors;
int i;
int count;
myColors = @[@"Red", @"Green", @"Blue", @"Yellow"];
count = myColors.count; // <<< issue warning here
for (i = 0; i < count; i++)
NSLog (@"Element %i = %@", i, [myColors objectAtIndex: i]);
}
return 0;
}
fonte
Ao contrário da resposta de Martin, transmitir para int (ou ignorar o aviso) nem sempre é seguro, mesmo que você saiba que sua matriz não possui mais de 2 ^ 31-1 elementos. Não ao compilar para 64 bits.
Por exemplo:
fonte
indexOfObject:
seria uma má idéia. Minha resposta foi direcionada para o código específico da pergunta e ocount
método não pode retornarNSNotFound
. Não recomendei transmitir para int ou ignorar avisos em geral. Desculpe se isso não estava claro. Na verdade, seu código de exemplo geraria um avisoif (i == NSNotFound)
se compilado para 64 bits, para que o problema não passasse despercebido.Alterar chave em Projeto> Configuração da compilação " verifique as chamadas para printf / scanf : NO "
Explicação: [Como funciona]
Verifique as chamadas para printf e scanf, etc., para garantir que os argumentos fornecidos tenham tipos apropriados para a sequência de formato especificada e se as conversões especificadas na sequência de formato fazem sentido.
Espero que funcione
Outro aviso
a conversão implícita do objetivo c perde a precisão inteira 'NSUInteger' (também conhecida como 'não assinado longo') para 'int
Altere a chave " conversão implícita para 32Bits Type> Debug> * 64 architecture: No "
[ cuidado: pode anular outro aviso de conversão da arquitetura de 64 bits] .
fonte
Fazer a conversão de expicit para o "int" resolve o problema no meu caso. Eu tive o mesmo problema. Assim:
fonte