¿Cómo convierto NSInteger a tipo de datos NSString?

137

¿Cómo se convierte NSIntegeral NSStringtipo de datos?

Intenté lo siguiente, donde el mes es un NSInteger:

  NSString *inStr = [NSString stringWithFormat:@"%d", [month intValue]];
senthilMuthu
fuente

Respuestas:

267

NSIntegers no son objetos, a los que los envía long, para que coincidan con la definición actual de las arquitecturas de 64 bits:

NSString *inStr = [NSString stringWithFormat: @"%ld", (long)month];

luvieere
fuente
11
Intenté esto, pero recibí una advertencia Format specifies type 'int' but the argument has type 'NSInteger *'(aka 'int *'). En lugar de acuerdo con la documentación de Apple , fui conNSString *inStr = [NSString stringWithFormat:@"%d", (int)month];
Steven
8
Tenga en cuenta que en los procesadores de 64 bits, como el nuevo chip A7, si su aplicación está compilada para 64 bits, un NSInteger es realmente un largo, no un int. Al realizar el reparto, (int) mes sería destructivo en plataformas de 64 bits para el caso genérico. Si se dirige exclusivamente a las plataformas de Apple, prefiera la forma Objective-C como en la respuesta de Aleksey Kozhevnikov, o algo similar que funcione con int y long, por ejemplo, long ;-) Un ejemplo, aunque sin signo (es decir, no negativo) está en Andreas La respuesta de Ley.
Louis St-Amour
1
@Steven He intentado eliminar la respuesta para que las actuales, más aplicables, salgan a la superficie y sean aceptadas, pero aparentemente, las respuestas aceptadas no se pueden eliminar. Por lo tanto, he intentado al menos ajustar su contenido para proporcionar tanta información útil para las personas que buscan una solución rápida que no provoque advertencias.
luvieere
La documentación de @luvieere de Apple explica claramente cómo tratar NSInteger en cadenas de formato. Debe actualizar su respuesta para seguir este consejo.
Nikolai Ruhe
2
[@(integerValue) stringValue]Es un enfoque más limpio.
Zorayr
185

Obj-C way =):

NSString *inStr = [@(month) stringValue];
Alexey Kozhevnikov
fuente
76

Objetivo moderno-C

An NSIntegertiene el método stringValueque puede usarse incluso con un literal

NSString *integerAsString1 = [@12 stringValue];

NSInteger number = 13;
NSString *integerAsString2 = [@(number) stringValue];

Muy simple. ¿No es así?

Rápido

var integerAsString = String(integer)
MadNik
fuente
8

%zdfunciona para NSIntegers ( %tupara NSUInteger) sin conversiones y sin advertencias en arquitecturas de 32 bits y 64 bits. No tengo idea de por qué esta no es la " forma recomendada ".

NSString *string = [NSString stringWithFormat:@"%zd", month];

Si está interesado en por qué esto funciona, vea esta pregunta .

Kevin
fuente
5

Manera fácil de hacer:

NSInteger value = x;
NSString *string = [@(value) stringValue];

Aquí los @(value)conversos lo dado NSIntegera un NSNumberobjeto para el que se puede llamar a la función requerida, stringValue.

Karthik damodara
fuente
2

Al compilar con soporte para arm64, esto no generará una advertencia:

[NSString stringWithFormat:@"%lu", (unsigned long)myNSUInteger];
Andreas Ley
fuente
2

También puedes probar:

NSInteger month = 1;
NSString *inStr = [NSString stringWithFormat: @"%ld", month];
Nunca sin esperanza
fuente
0

Se da la respuesta, pero piense que para alguna situación, esta también será una forma interesante de obtener cadenas de NSInteger

NSInteger value = 12;
NSString * string = [NSString stringWithFormat:@"%0.0f", (float)value];
Nazir
fuente
0

NSNumber puede ser bueno para usted en este caso.

NSString *inStr = [NSString stringWithFormat:@"%d", 
                    [NSNumber numberWithInteger:[month intValue]]];
exaltado
fuente