将NSInteger转换为NSString

时间:2012-02-22 22:32:15

标签: objective-c ios nsstring string-formatting nsinteger

我正在尝试用几个不同的部分制作一个字符串。以下就是我现在所拥有的。我的代码中没有任何错误,但是一旦我运行它并执行触发它的事件我得到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];

7 个答案:

答案 0 :(得分:20)

字符串和整数基本上是不同的数据类型,在这种情况下,Objective-C中的转换不会为你做转换,它只会让编译器知道发生了什么(所以它编译)但是在运行时它会爆炸。

您可以使用%d代替%@将整数直接嵌入到格式字符串中:

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

NSInteger只是常规“int”(数字)的奇特名称。 NSString是对字符串对象的对象引用。一些数字类型(int和浮点)可以像这样直接在C中相互转换,但这两者根本不可互操作。听起来你可能会来自一种更宽松的语言? :)

答案 1 :(得分:17)

  

于12月22日22:34回答,Ben Zotto:

     

字符串和整数是根本不同的数据类型,和   在这种情况下,在Objective-C中进行转换不会为你做转换,   这只会让编译器对发生的事情撒谎(所以编译)   但是在运行时它会爆炸。

     

您可以使用%d将整数直接嵌入到格式字符串中   而不是%@:

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

NSInteger只是常规“int”的奇特名称   (数)。 NSString是对字符串对象的对象引用。一些   数字类型(int和浮点)可以进行转换   彼此之间直接在C这样,但这两个不是   完全可以互操作。听起来你可能会来自更多   宽容的语言? :)

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

所以,解决方案:

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

来源:String Programming Guide for Cocoa - String Format Specifiers(需要iPhone开发人员注册)

答案 2 :(得分:1)

您必须使用%d表示整数,而不是%@

因此,[NSString stringWithFormat:@"%@%d%@%d", part1,num1, part2, num2];是格式化字符串的正确代码。

希望它有所帮助。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

尝试以下方法:

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

答案 5 :(得分:0)

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

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

试图强迫NSInteger进入NSString*的演员阵容也很危险,可能是你坠机的实际来源。编译器让你逃脱它,因为它相信你知道你正在用这种演员声明做什么。

答案 6 :(得分:0)

NSString *part1, *part2, *tempString;

NSInteger num1;
NSInteger num2;

part1=@"some";
part2=@"text";

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