Estoy trabajando en algunos ejercicios y tengo una advertencia que dice:
La conversión implícita pierde precisión entera: 'NSUInteger' (también conocido como 'unsigned long') a '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;
}
fuente
Contrariamente a la respuesta de Martin, lanzar a int (o ignorar la advertencia) no siempre es seguro, incluso si sabe que su matriz no tiene más de 2 ^ 31-1 elementos. No cuando compila para 64 bits.
Por ejemplo:
fuente
indexOfObject:
sería una mala idea. Mi respuesta fue para el código específico en la pregunta, y elcount
método no puede regresarNSNotFound
. No recomendé enviar a int o ignorar las advertencias en general. Lo siento si eso no estaba claro. De hecho, su código de muestra generaría una advertenciaif (i == NSNotFound)
si se compila para 64 bits, por lo que el problema no pasaría desapercibido.Cambiar clave en Proyecto> Configuración de compilación " typecheck llama a printf / scanf : NO "
Explicación: [Cómo funciona]
Verifique las llamadas a printf y scanf, etc., para asegurarse de que los argumentos proporcionados tengan tipos apropiados para la cadena de formato especificada, y que las conversiones especificadas en la cadena de formato tengan sentido.
Espero que funcione
Otra advertencia
la conversión implícita del objetivo c pierde precisión entera 'NSUInteger' (también conocido como 'largo sin signo') a 'int
Cambiar clave " conversión implícita a 32 bits Tipo> Depurar> * 64 arquitectura: No "
[ precaución: puede anular otra advertencia de conversión de arquitectura de 64 Bits] .
fuente
Hacer el casting explícito al "int" resuelve el problema en mi caso. Tuve el mismo problema. Entonces:
fuente