Bagaimana cara mengubah NSNumber ke NSString

132

Jadi saya punya NSArray"myArray" dengan NSNumbers dan NSStrings. Saya membutuhkan mereka di yang lain UIViewjadi saya pergi seperti ini:

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

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

SubjekTeks berfungsi. Tapi bagaimana saya bisa mendapatkan NSNumberitu? (Saya benar-benar membutuhkan mereka sebagai string ...) saya akan mengkonversi NSStringkeluar dari NSNumberseperti ini: NSString *blah = [NSNumber intValue]. Tapi saya tidak tahu cara mengaturnya di kode di atas ...

dav3
sumber
Array Anda tampaknya mengandung kamus, dilihat dari penggunaannya objectForKey. Jadi, Anda perlu mengekstrak nilai yang sesuai dari itu sebelum mencoba mengonversi. Perhatikan bahwa sebagian besar tipe objek Kakao, termasuk NSNumber, dapat dikonversi ke string dengan memanggil descriptionmetode (atau menggunakan %@string format).
walkytalky
wow .. terima kasih walkytalky! dapatkah Anda mengarahkan saya ke dokumentasi atau memberikan contoh kode untuk memahaminya? =)
dav3

Jawaban:

380

Mencoba:

NSString *myString = [NSNumber stringValue];
JonLOo
sumber
3
tetapi Anda harus mengambil NSNumber yang ada di dalam array dan kemudian memanggil metode StringValue, sesuatu seperti NSString * myString = [[myArray objectAtIndex: i] stringValue]; tetapi Anda harus yakin bahwa Anda memiliki NSNumber di indeks itu
JonLOo
Saya lebih suka descriptionWithLocale: [NSLocale currentLocale] karena ini berfungsi baik untuk int dan mengapung.
just.do.it
@ Jonloo saat menggunakan ini untuk nomor tertentu nilai desimal kehilangan nilai yang tepat. Untuk Misalnya: NSNumber * num = [NSNumber numberWithDouble: 48.3]; NSString * strNumber = num.stringValue; memberikan hasil sebagai 48.299999; ini menjadi kritis jika jumlahnya dan harus berurusan dengan di dunia nyata dan dikalikan dengan jumlah besar. !! Adakah pemikiran?
Vish
hai @Vish, saya belum mencoba solusi ini jadi saya tidak yakin apakah itu akan berhasil, coba memformatnya dengan %fseperti ini: [NSString stringWithFormat:@"%f", yourDouble];
JonLOo
"Tidak ada metode kelas yang dikenal untuk pemilih 'stringValue'" <- stringValue bukan fungsi kelas sehingga Anda tidak dapat memanggilnya di NSNumber secara langsung. Jawaban rhalgravez melakukannya dengan benar.
user1021430
13

Anda dapat melakukannya dengan:

NSNumber *myNumber = @15;
NSString *myNumberInString = [myNumber stringValue];
rhalgravez
sumber
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
sumber
5

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

sbs
sumber
8
Ini melakukan dua konversi. Satu untuk mengubah NSNumber menjadi intValue dan satu untuk memaksa intValue yang dihasilkan menjadi NSString. Menggunakan ini mungkin kecil untuk sebagian orang, tetapi menghapusnya adalah cara yang bagus untuk menghemat siklus komputasi kecil ... yang dapat bertambah.
Jann
Ini mengasumsikan bahwa angka-angka yang disimpan adalah int. Bagaimana jika Anda tidak tahu jenis nomor yang disimpan?
James Webster
3

Yang lucu adalah bahwa NSNumber mengkonversi ke string secara otomatis jika itu menjadi bagian dari string. Saya tidak berpikir itu didokumentasikan. Coba ini:

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);

Itu akan mencetak:

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

Bekerja di Mac dan iOS

Yang ini tidak berfungsi:

NSString *myNSNumber2 = [NSNumber numberWithFloat:-34512.23f];
Tibidabo
sumber
2
Ini didokumentasikan: %@penentu format akan mengirim -descriptionpesan ke objek penerima yang sesuai. Anda dapat membuat terakhir kerja baris Anda dalam semangat yang sama dengan menulis: NSString *myNSNumber2 = [[NSNumber numberWithFloat:-34512.23f] description];. Sejauh yang saya tahu, NSNumber's descriptiondan stringValuemetode melakukan hal yang sama.
Jean-Denis Muys
2

Di Swift Anda bisa melakukan ini

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

Di Swift 3.0

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

Kita bisa mendapatkan nilai angka di String.

Gautam Sareriya
sumber