Como converter NSNumber para NSString

132

Então, eu tenho um NSArray"myArray" com NSNumbers e NSStrings. Eu preciso deles em outro, UIViewentão eu vou assim:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

DetailViewController *details = [[DetailViewController alloc] initWithNibName:@"DetailView" bundle:nil];
details.subjectText = [[myArray objectAtIndex:indexPath.row] objectForKey:@"subject"];

O subjectText funciona. Mas como posso tirar NSNumberproveito disso? (Eu realmente precisa deles como cordas ...) Gostaria de converter um NSStringfora de um NSNumbercomo este: NSString *blah = [NSNumber intValue]. Mas não sei como configurá-lo no código acima ...

dav3
fonte
Sua matriz parece conter dicionários, a julgar pelo uso de objectForKey. Portanto, você precisará extrair os valores apropriados disso antes de tentar converter. Observe que a maioria dos tipos de objetos Cocoa, incluindo NSNumber, pode ser convertida em seqüências de caracteres chamando o descriptionmétodo (ou usando %@uma seqüência de caracteres de formato).
WalkyTalky
uau .. obrigado walkytalky! você pode me indicar uma documentação ou dar um código de exemplo para compreendê-la? =)
dav3 19/10/10

Respostas:

380

Experimentar:

NSString *myString = [NSNumber stringValue];
JonLOo
fonte
3
mas você deve pegar o NSNumber que está dentro da matriz e chamar o método StringValue, algo como NSString * myString = [[myArray objectAtIndex: i] stringValue]; mas você precisa ter certeza de que possui um NSNumber nesse índice
JonLOo 19/10/10
Prefiro descriptionWithLocale: [NSLocale currentLocale] porque funciona para entradas e flutuantes.
just.do.it
@JonLOo ao usar isso para um número específico, os valores decimais perdem os valores exatos. Por exemplo: NSNumber * num = [NSNumber numberWithDouble: 48.3]; NSString * strNumber = num.stringValue; dá resultados como 48.299999; isso se torna crítico se sua quantidade e tem que lidar com o mundo real e multiplicado por grandes números. !! Alguma idéia?
Vish
oi @Vish, eu não tentar esta solução tão im não tenho certeza se ele vai funcionar, tente formatá-lo com o %fassim: [NSString stringWithFormat:@"%f", yourDouble];
JonLOo
"Nenhum método de classe conhecido para o seletor 'stringValue'" <- stringValue não é uma função de classe, portanto você não pode chamá-lo diretamente no NSNumber. A resposta de rhalgravez faz isso corretamente.
user1021430
13

Você pode fazer isso com:

NSNumber *myNumber = @15;
NSString *myNumberInString = [myNumber stringValue];
rhalgravez
fonte
7
//An example of implementation :
// we set the score of one player to a value
[Game getCurrent].scorePlayer1 = [NSNumber numberWithInteger:1];
// We copy the value in a NSNumber
NSNumber *aNumber = [Game getCurrent].scorePlayer1;
// Conversion of the NSNumber aNumber to a String with stringValue
NSString *StringScorePlayer1 = [aNumber stringValue];
fcoque
fonte
5

ou tente NSString *string = [NSString stringWithFormat:@"%d", [NSNumber intValue], nil];

sbs
fonte
8
Isso faz duas conversões. Um para transformar NSNumber em intValue e outro para coagir o intValue resultante em um NSString. Usar isso pode ser pequeno para alguns, mas removê-lo é uma ótima maneira de salvar pequenos ciclos computacionais ... o que pode aumentar.
Jann
Isso pressupõe que os números que estão sendo armazenados são ints. E se você não souber o tipo de número armazenado?
James Webster
3

O engraçado é que o NSNumber converte automaticamente em string se se tornar parte de uma string. Eu não acho que esteja documentado. Tente esse:

NSLog(@"My integer NSNumber:%@",[NSNumber numberWithInt:184]);
NSLog(@"My float NSNumber:%@",[NSNumber numberWithFloat:12.23f]);
NSLog(@"My bool(YES) NSNumber:%@",[NSNumber numberWithBool:YES]);
NSLog(@"My bool(NO) NSNumber:%@",[NSNumber numberWithBool:NO]);

NSString *myStringWithNumbers = [NSString stringWithFormat:@"Int:%@, Float:%@ Bool:%@",[NSNumber numberWithInt:132],[NSNumber numberWithFloat:-4.823f],[NSNumber numberWithBool:YES]];
NSLog(@"%@",myStringWithNumbers);

Irá imprimir:

My integer NSNumber:184
My float NSNumber:12.23
My bool(YES) NSNumber:1
My bool(NO) NSNumber:0
Int:132, Float:-4.823 Bool:1

Funciona em Mac e iOS

Este não funciona:

NSString *myNSNumber2 = [NSNumber numberWithFloat:-34512.23f];
Tibidabo
fonte
2
Isso está documentado: o %@especificador de formato enviará a -descriptionmensagem para o objeto receptor correspondente. Você pode fazer o seu trabalho última linha com o mesmo espírito escrevendo: NSString *myNSNumber2 = [[NSNumber numberWithFloat:-34512.23f] description];. Tanto quanto eu posso dizer, NSNumberos métodos descriptione stringValuefazem a mesma coisa.
Jean-Denis Muys 22/03
2

No Swift você pode fazer assim

let number : NSNumber = 95
let str : String = number.stringValue
Singhak
fonte
2

No Swift 3.0

let number:NSNumber = 25
let strValue = String(describing: number as NSNumber)
print("As String => \(strValue)")

Podemos obter o valor numérico em String.

Gautam Sareriya
fonte