将NSInteger转换为NSString

13 objective-c string-formatting nsstring nsinteger ios

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

Ben*_*tto 20

一个字符串和一个整数是根本不同的数据类型,在Objective-C铸造为您在这种情况下,不会做一个转换,它只会骗大约发生了什么(所以编译)编译器,但在运行时它的冲击起来.

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

    tempString = [NSString stringWithFormat:@"%@%d%@%d", part1,num1, part2, num2];
Run Code Online (Sandbox Code Playgroud)

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


sai*_*ech 18

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

一个字符串和一个整数是根本不同的数据类型,在Objective-C铸造为您在这种情况下,不会做一个转换,它只会骗大约发生了什么(所以编译)编译器,但在运行时它的冲击起来.

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

tempString = [NSString stringWithFormat:@"%@%d%@%d", part1,num1, part2, num2];
Run Code Online (Sandbox Code Playgroud)

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

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

所以,解决方案:

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

来源:Cocoa字符串编程指南 - 字符串格式说明符(需要iPhone开发人员注册)

  • 使用Xcode 5.1.1时,如果在使用%ld格式化程序时NSInteger值未转换为(long),则会生成警告. (4认同)