将id转换为长类型崩溃

时间:2015-06-29 16:12:02

标签: ios casting long-integer

我试图将从json返回的id值转换为long值(时间戳目的)。

xcode sais me:

-[__NSCFString longValue]: unrecognized selector sent to instance 0x15d3f220
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString longValue]: unrecognized selector sent to instance 0x15d3f220'

下一行会破坏代码。

long time_now = [self getTimestamp];
                    long fdate = [[results2 objectForKey:@"pll_first_date"] longValue];
                    long sdate = [[results2 objectForKey:@"pll_second_date"] longValue];

我做错了什么? id类型不是要生成的动态类型吗?

发表评论后,这是我可能的解决方案:

long long time_now = [self getTimestamp];
                    long long fdate = [(NSString *)[results2 objectForKey:@"pll_first_date"] longLongValue];
                    long long sdate = [(NSString *)[results2 objectForKey:@"pll_second_date"] longLongValue];

3 个答案:

答案 0 :(得分:2)

这不是演员,它是一个方法调用。并且,您无法从id投射到long(嗯,您可以,但它的效用非常有限)。

您尝试让NSString将自己转换为long,但它不会回复longValue

NSString确实有一个longLongValue方法,您可以使用它。

答案 1 :(得分:1)

选择器无法识别,因为longValue不是NSString中的方法。请改用longLongValue

long long fdate = [[results2 objectForKey:@"pll_first_date"] longLongValue];
long long nsdate = [[results2 objectForKey:@"pll_second_date"] longLongValue];

这是the documentation的链接。

答案 2 :(得分:0)

可能性:

long long time_now = [self getTimestamp];
                    long long fdate = [(NSString *)[results2 objectForKey:@"pll_first_date"] longLongValue];
                    long long sdate = [(NSString *)[results2 objectForKey:@"pll_second_date"] longLongValue];