我使用facebook SDK向facebook API发出请求以获取用户基本数据。一切正常,但是当我尝试将facebook ID作为NSInteger号码传递时,返回的号码是错误的。
Facebook ID为:100001778401161 但在将数字转换为NSInteger后,返回的数字是:2054848393
如何将facebook ID存储在NSInteger变量上?
我目前的代码是:
NSLog(@"The ID: %ld", (long)[[user objectForKey:@"id"] intValue])
感谢。
答案 0 :(得分:3)
这样的数字需要64位,NSInteger仅覆盖32位(正数仅为31位)。尝试使用long long值:
NSLog(@"The ID: %lld", [[user objectForKey:@"id"] longLongValue]);
如果您需要以某种方式将其存储为对象,也可以使用NSNumber:
NSNumber *number=[NSNumber numberWithLongLong:[user[@"id"] longLongValue]];
答案 1 :(得分:0)
NSInteger(和long)是一个32位值,您使用的ID超出了它可以容纳的最大值,因此它会溢出。你可以尝试:
long long facebookId = [[user objectForKey: @"id"] longLongValue];
NSLog(@"The ID: %lld", facebookId);
我对facebook API一无所知,因此您可能希望确保ID随着时间的推移保证为数字。例如,如果他们指定ID是字符串的某个地方,即使它们似乎总是数字,也应该匹配。
答案 2 :(得分:0)
您无法在NSInteger
类型中存储大于2 ^ 31的数字。
如果要存储较大的那个,则可以使用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);
希望这会对你有帮助!