2011-03-01 16 views
21

¿Cómo se convierte un NSUInteger en un NSString? Lo intenté pero mi NSString devolvió 0 todo el tiempo.¿Cómo se convierte un NSUInteger en un NSString?

NSUInteger NamesCategoriesNSArrayCount = [self.NamesCategoriesNSArray count]; 
NSLog(@"--- %d", NamesCategoriesNSArrayCount); 
[NamesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]]; 
NSLog(@"=== %d", NamesCategoriesNSArrayCountString); 

Respuesta

7

espero que su NamesCategoriesNSArrayCountString es NSString; En caso afirmativo, utilice la siguiente línea de código.

NamesCategoriesNSArrayCountString = [NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]]; 

Istead de

[NamesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%d", NamesCategoriesNSArrayCount]]; 
+0

A partir de Xcode 4.5, arrojará una advertencia de "Argumento de datos no utilizado por la cadena de formato". ¿Alguien sabe el formato correcto? – GeneralMike

+0

Sin tener en cuenta el último.Tuve un error tipográfico que no noté durante mucho tiempo, y el error tipográfico fue el que causó el error. '[NSString stringWithFormat: @"% d ", myNSUInteger]' sigue siendo la forma correcta de hacerlo. – GeneralMike

+1

La respuesta de @ andreas-ley es más precisa. ''% d'' es la cadena de formato para un entero * signed *. NSUInteger es un entero * sin signo largo *. Se necesita usar ''% lu'' una vez que se supera la superposición entre el rango sin signo y el rango con signo, de lo contrario se imprimirá un valor negativo cuando en realidad el número sea positivo. – Ben

32

Cuando se compila con soporte para arm64, esto no generará una advertencia:

[NSString stringWithFormat:@"%lu", (unsigned long)myNSUInteger]; 
+7

o '% zd' para' NSUInteger', sin encasillarlo. –

+1

@PaulPeelen ¿Querías decir 'NSInteger'? –

+1

Mi mal ... Quise decir, por supuesto, '% tu' (ya que no tiene firma). –

4

cuando se compila para arm64, utilice lo siguiente para evitar advertencias:

[NSString stringWithFormat:@"%tu", myNSUInteger]; 

O, en su caso:

NSUInteger namesCategoriesNSArrayCount = [self.NamesCategoriesNSArray count]; 
NSLog(@"--- %tu", namesCategoriesNSArrayCount); 
[namesCategoriesNSArrayCountString setText:[NSString stringWithFormat:@"%tu", namesCategoriesNSArrayCount]]; 
NSLog(@"=== %@", namesCategoriesNSArrayCountString); 

(también, de punta: Variables empezar con minúscula. Info: here)

+1

Tenga en cuenta que, si bien 'tu' funciona en este momento, no está garantizado. Vea aquí: http://stackoverflow.com/questions/18893880/alternatives-to-type-casting-when-formatting-nsuinteger-on-32-and-64-bit-archi –

+0

Muy cierto. No lo sabía en realidad. Es bueno tenerlo en cuenta para el futuro. –

5

También puede utilizar:

NSString *rowString = [NSString stringWithFormat: @"%@", @(row)]; 

donde fila es un NSUInteger.

0

Este String Format Specifiers artículo de Apple es específico cuando se necesita para dar formato a los tipos de Apple:

OS X utiliza varios tipos-NSInteger de datos, NSUInteger, CGFloat y CFIndex para proporcionar un medio coherente de representar los valores de Entornos de 32 y 64 bits. En un entorno de 32 bits, NSInteger y NSUInteger se definen como int y unsigned int, respectivamente. En entornos de 64 bits, NSInteger y NSUInteger se definen como long y unsigned long, respectivamente. Para evitar la necesidad de utilizar diferentes especificadores de tipo de estilo de impresión en función de la plataforma, puede utilizar los especificadores que se muestran en la Tabla 3. Tenga en cuenta que en algunos casos puede que tenga que emitir el valor.

  • [NSString stringWithFormat:@"%ld", (long)value]: NSInteger muestra como decimal
  • [NSString stringWithFormat:@"%lx", (long)value]: NSInteger muestra como hex
  • [NSString stringWithFormat:@"%lu", (unsigned long)value]: NSUInteger muestra como decimal
  • [NSString stringWithFormat:@"%lx", (unsigned long)value]: NSUInteger muestra como hex
  • [NSString stringWithFormat:@"%f", value]: CGFloat
  • [NSString stringWithFormat:@"%ld", (long)value]: CFIndex se muestra como d ecimal
  • [NSString stringWithFormat:@"%lx", (long)value]: CFIndex muestra como hexagonal

Véase el artículo para más detalles.

Cuestiones relacionadas