将NSInteger转换为NSString

我正在尝试从几个不同的部分中创build一个string。 这下面是我现在所拥有的。 我没有在我的代码中有任何错误,但只要我运行这个,做触发它的事件,我得到EXC_BAD_ACCESS 。 有没有另一种方法将此NSInteger转换为NSString

 NSString *part1, *part2, *tempString; NSInteger num1; NSInteger num2; part1=@"some"; part2=@"text"; tempString = [NSString stringWithFormat:@"%@%@%@%@", part1, (NSString *)num1, part2, (NSString *)num2]; 

一个string和一个整数是根本不同的数据types,在这种情况下,在Objective-C中的转换不会为你做转换,它只是对编译器说谎发生了什么(所以它编译),但在运行时它吹向上。

您可以使用%d而不是%@将整数直接embedded到格式string中:

  tempString = [NSString stringWithFormat:@"%@%d%@%d", part1,num1, part2, num2]; 

NSInteger只是一个普通的“int”(数字)的花哨名称。 NSString是一个string对象的对象引用。 一些数字types(int和浮点数)可以像C这样在C中直接相互转换,但是这两者根本不可互操作。 这听起来像你可能来自一个更宽容的语言? 🙂

回答2月22日12时22分34,本Zotto:

一个string和一个整数是根本不同的数据types,在这种情况下,在Objective-C中的转换不会为你做转换,它只是对编译器说谎发生了什么(所以它编译),但在运行时它吹向上。

您可以使用%d而不是%@将整数直接embedded到格式string中:

 tempString = [NSString stringWithFormat:@"%@%d%@%d", part1,num1, part2, num2]; 

NSInteger只是一个普通的“int”(数字)的花哨名称。 NSString是一个string对象的对象引用。 一些数字types(int和浮点数)可以像C这样在C中直接相互转换,但是这两者根本不可互操作。 这听起来像你可能来自一个更宽容的语言? 🙂

“请记住,@”%d“只能在32位上工作,一旦你开始使用NSInteger兼容,如果你编译的是64位的平台,你应该使用@”%ld“作为你的格式说明符。 作者Marc Charbonneau

所以,解决办法:

 tempString = [NSString stringWithFormat:@"%@%ld%@%ld", part1, (long)num1, part2, (long)num2]; 

来源: cocoastring编程指南 – string格式说明符 (需要iPhone开发者注册)

您必须使用%d作为整数,而不是%@

所以, [NSString stringWithFormat:@"%@%d%@%d", part1,num1, part2, num2]; 是格式化string的正确代码。

希望能帮助到你。

 NSString* tempString = [NSString stringWithFormat:@"%@%d%d", part1, num1, num2]; 

尝试以下方法:

  tempString = [NSString stringWithFormat:@"%@%d%@%d", part1,(NSString *)num1, part2, (NSString *)num2]; 

NSInteger是实际的整数 – 不是NSObject派生的对象。 尝试:

 tempString = [NSString stringWithFormat:@"%@%d%@%d", part1, num1, part2, num2]; 

试图强制NSIntegerNSString*的演员也是危险的,可能是您的崩溃的实际来源。 编译器让你摆脱它,因为它相信你知道你在用这种types的转换语句做什么。

 NSString *part1, *part2, *tempString; NSInteger num1; NSInteger num2; part1=@"some"; part2=@"text"; tempString = [NSString stringWithFormat:@"%@%d%@%d", part1,num1, part2, num2]; NSLog(@"%@",tempString);