casting NSInteger into NSString

非 Y 不嫁゛ 提交于 2019-12-03 05:41:23

A string and an integer are fundamentally different data types, and casting in Objective-C won't do a conversion for you in this case, it'll just lie to the compiler about what's happening (so it compiles) but at runtime it blows up.

You can embed an integer directly into a format string by using %d instead of %@:

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

NSInteger is just a fancy name for a regular "int" (number). An NSString is an object reference to a string object. Some numeric types (int and floating point) can be sort of converted between eachother directly in C like this, but these two aren't inter-operable at all. It sounds like you might be coming from a more permissive language? :)

saintech

answered Feb 22 '12 at 22:34, Ben Zotto:

A string and an integer are fundamentally different data types, and casting in Objective-C won't do a conversion for you in this case, it'll just lie to the compiler about what's happening (so it compiles) but at runtime it blows up.

You can embed an integer directly into a format string by using %d instead of %@:

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

NSInteger is just a fancy name for a regular "int" (number). An NSString is an object reference to a string object. Some numeric types (int and floating point) can be sort of converted between eachother directly in C like this, but these two aren't inter-operable at all. It sounds like you might be coming from a more permissive language? :)

"Keep in mind that @"%d" will only work on 32 bit. Once you start using NSInteger for compatibility if you ever compile for a 64 bit platform, you should use @"%ld" as your format specifier." by Marc Charbonneau

So, solution:

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

Source: String Programming Guide for Cocoa - String Format Specifiers (Requires iPhone developer registration)

You have to use %d for integer and not %@.

So, [NSString stringWithFormat:@"%@%d%@%d", part1,num1, part2, num2]; is the correct code to format your string.

Hope it helps.

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

try the following:

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

NSIntegers are actual integers - not NSObject-derived objects. Try:

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

The cast trying to force NSInteger into NSString* is also dangerous, and probably the actual source of your crash. The compiler is letting you get away with it because it's trusting you know what you're doing with that kind of casting statement.

NSString *part1, *part2, *tempString;

NSInteger num1;
NSInteger num2;

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

tempString = [NSString stringWithFormat:@"%@%d%@%d", part1,num1, part2, num2];
NSLog(@"%@",tempString);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!