วิธีแปลง NSNumber เป็น NSString


132

ผมจึงมีNSArray"myArray" พร้อมNSNumbers และNSStrings ฉันต้องการพวกเขาในอีกUIViewดังนั้นฉันจึงไปแบบนี้:

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

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

SubjectText ใช้งานได้ แต่ฉันจะNSNumberเอามันออกไปได้อย่างไร? (อันที่จริงฉันต้องการเป็นสตริง ... ) ฉันจะแปลงNSStringออกมาจากเช่นนี้NSNumber NSString *blah = [NSNumber intValue]แต่ไม่รู้จะตั้งค่ายังไงในโค้ดด้านบน ...


อาร์เรย์ของคุณดูเหมือนจะมีพจนานุกรมจริงๆแล้วซึ่งตัดสินโดยการใช้objectForKey. ดังนั้นคุณจะต้องแยกค่าที่เหมาะสมออกจากค่านั้นก่อนที่จะพยายามแปลง โปรดทราบว่าประเภทออบเจ็กต์ Cocoa ส่วนใหญ่รวมถึง NSNumber สามารถแปลงเป็นสตริงได้โดยเรียกใช้descriptionเมธอด (หรือใช้%@ในสตริงรูปแบบ)
walkytalky

ว้าว .. ขอบคุณค่ะคุณ walkytalky! คุณช่วยชี้ให้ฉันดูเอกสารหรือให้รหัสตัวอย่างเพื่อทำความเข้าใจได้ไหม =)
dav3

คำตอบ:


382

ลอง:

NSString *myString = [NSNumber stringValue];

3
แต่คุณควรใช้ NSNumber ซึ่งอยู่ภายในอาร์เรย์แล้วเรียกใช้เมธอด StringValue เช่น NSString * myString = [[myArray objectAtIndex: i] stringValue]; แต่คุณต้องแน่ใจว่าคุณมี NSNumber ที่ดัชนีนั้น
JonLOo

ฉันชอบ descriptionWithLocale: [NSLocale currentLocale] เพราะใช้ได้ทั้ง ints และ float
just.do.it

@JonLOo เมื่อใช้สิ่งนี้สำหรับจำนวนเฉพาะค่าทศนิยมจะหลวมค่าที่แน่นอน สำหรับเช่น: NSNumber * num = [NSNumber numberWithDouble: 48.3]; NSString * strNumber = num.stringValue; ให้ผลลัพธ์เป็น 48.299999; สิ่งนี้จะกลายเป็นเรื่องสำคัญหากจำนวนของมันและต้องจัดการในโลกแห่งความเป็นจริงและคูณด้วยตัวเลขจำนวนมาก !! ความคิดใด ๆ ?
Vish

สวัสดี @Vish ฉันไม่ได้ลองวิธีนี้ดังนั้นฉันไม่แน่ใจว่ามันจะใช้งานได้หรือไม่ลองฟอร์แมตด้วยสิ่ง%fนี้: [NSString stringWithFormat:@"%f", yourDouble];
JonLOo

"ไม่มีเมธอดคลาสที่รู้จักสำหรับตัวเลือก 'stringValue'" <- stringValue ไม่ใช่ฟังก์ชันคลาสดังนั้นคุณจึงไม่สามารถเรียกใช้ใน NSNumber ได้โดยตรง คำตอบของ rhalgravez นั้นถูกต้อง
user1021430


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

5

หรือลอง NSString *string = [NSString stringWithFormat:@"%d", [NSNumber intValue], nil];


8
สิ่งนี้ทำให้เกิดการแปลงสองรายการ หนึ่งในการเปลี่ยน NSNumber ให้เป็น intValue และอีกอันหนึ่งเพื่อบังคับ intValue ที่เป็นผลลัพธ์ให้เป็น NSString การใช้สิ่งนี้อาจเล็กน้อยสำหรับบางคน แต่การลบออกเป็นวิธีที่ดีในการประหยัดรอบการคำนวณขนาดเล็ก ...
Jann

สิ่งนี้ถือว่าตัวเลขที่จัดเก็บเป็น ints จะเกิดอะไรขึ้นหากคุณไม่ทราบประเภทของหมายเลขที่จัดเก็บไว้?
James Webster

3

สิ่งที่ตลกคือ NSNumber จะแปลงเป็นสตริงโดยอัตโนมัติหากมันกลายเป็นส่วนหนึ่งของสตริง ฉันไม่คิดว่ามันเป็นเอกสาร ลองสิ่งเหล่านี้:

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

มันจะพิมพ์:

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

ทำงานได้ทั้งบน Mac และ iOS

อันนี้ใช้ไม่ได้:

NSString *myNSNumber2 = [NSNumber numberWithFloat:-34512.23f];

2
นี่เป็นเอกสาร: ตัว%@ระบุรูปแบบจะส่ง-descriptionข้อความไปยังวัตถุตัวรับที่เกี่ยวข้อง NSString *myNSNumber2 = [[NSNumber numberWithFloat:-34512.23f] description];คุณสามารถทำให้การทำงานของบรรทัดสุดท้ายของคุณในจิตวิญญาณเดียวกันโดยการเขียน: เท่าที่ฉันสามารถบอกได้NSNumberว่าdescriptionและstringValueวิธีการทำสิ่งเดียวกัน
Jean-Denis Muys


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.