Advertencia: la conversión implícita pierde precisión entera en xcode 6

Sé que podría ser un duplicado, pero obtuve alnetworkingedor de 30 La conversión implícita pierde advertencias de precisión Entero en mi proyecto ios después de actualizar xcode a la versión 6.

Primer ejemplo:

NSArray * stations = [self stationsJSON][KEY_ITEM_LIST]; int newSize = (stations.count + 1); // Implicit conversion loses Integer precision: 'unsigned long' to 'int' 

Segundo ejemplo:

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { ... int index = indexPath.row / 2; // Implicit conversion loses Integer precision: 'long' to 'int' ... } 

Sé lo que significa la advertencia. El uso de NSInteger puede ayudar a evitar esta advertencia.

No entiendo, ¿por qué no hubo advertencias en xcode 5 ? Y por qué no hay ninguna advertencia después de cambiar la línea

 int index = indexPath.row / 2; 

a

 int index = indexPath.row / 2i; 

NSArray count es NSUInteger .

NSIndexPath row es NSInteger .

En sistemas de 64 bits, NSUInteger y NSInteger son 64 bits, pero int es de 32 bits. Entonces, el valor no se ajustará a lo que resulta en la advertencia.

Lo mejor es evitar int en iOS. En su lugar, use el mismo tipo que los valores con los que está tratando.

 NSInteger index = indexPath.row / 2; 

Probablemente los vea en Xcode 6 debido a las advertencias pnetworkingeterminadas. Puede verlos fácilmente en Xcode 5 con la configuration de advertencia correcta y la creación de 64 bits.

Puede actualizar la configuration del proyecto, eliminar todo

Implicit conversion loses integer precision advertencias de Implicit conversion loses integer precision , estableciendo

Implicit Conversion to 32 Bit Type a No

en la configuration de compilation del proyecto.

introduzca la descripción de la imagen aquí

Siempre me molestaron estas advertencias, así que encontré una solución simple para evitarlo:

 @interface NSIndexPath(UnsignedIndex) @property (nonatomic, readonly) NSUInteger sectionIndex; @property (nonatomic, readonly) NSUInteger rowIndex; @end @implementation NSIndexPath(UnsignedIndex) - (NSUInteger)sectionIndex { return (NSUInteger)self.section; } - (NSUInteger)rowIndex { return (NSUInteger)self.row; } @end 

Simplemente use las properties rowIndex y sectionIndex de esta categoría en lugar de las properties de fila y sección de NSIndexPath.