我使用facebook向facebook请求获取用户基本数据。一切正常,但当我试图将facebook ID作为NSInteger号码传递时,返回的号码是错误的。
facebook ID为: 100001778401161,但将号码转换为NSInteger后,返回的号码是: 2054848393
如何将facebook ID存储在NSInteger变量上?
我目前的代码是:
NSLog(@"The ID: %ld", (long)[[user objectForKey:@"id"] intValue])谢谢。
发布于 2013-08-06 18:33:56
这样的数字需要64位,NSInteger只覆盖32位(正数只有31位)。尝试使用长长值:
NSLog(@"The ID: %lld", [[user objectForKey:@"id"] longLongValue]);如果需要以某种方式将其存储为对象,也可以使用NSNumber:
NSNumber *number=[NSNumber numberWithLongLong:[user[@"id"] longLongValue]];发布于 2013-08-06 18:37:25
NSInteger (和long)是一个32位的值,您使用的ID超过了它所能容纳的最大值,所以它会溢出。你可以试试:
long long facebookId = [[user objectForKey: @"id"] longLongValue];
NSLog(@"The ID: %lld", facebookId);我对facebook一无所知,所以您可能需要确保ID随时间的推移是数字的。例如,如果它们指定某个地方的ID是字符串,那么即使它们看起来总是数字的,您也应该匹配它。
发布于 2013-08-06 18:41:17
不能将大于2^ 31的数字存储在NSInteger类型中。如果您想要存储一个较大的,那么您可以使用NSDecimalNumber对象代替。或者您可以使用unsigned long long类型。
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:[user objectForKey:@"id"]];
NSLog(@"Number: %@", number);
unsigned long long ullValue = strtoull([user objectForKey:@"id"], NULL, 0);
NSLog(@"Number: %llu", ullValue);希望这能帮到你!
https://stackoverflow.com/questions/18087584
复制相似问题