将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];
试图强制NSInteger
到NSString*
的演员也是危险的,可能是您的崩溃的实际来源。 编译器让你摆脱它,因为它相信你知道你在用这种types的转换语句做什么。
NSString *part1, *part2, *tempString; NSInteger num1; NSInteger num2; part1=@"some"; part2=@"text"; tempString = [NSString stringWithFormat:@"%@%d%@%d", part1,num1, part2, num2]; NSLog(@"%@",tempString);