NSInteger和facebookId

时间:2013-08-06 18:18:04

标签: iphone ios facebook nsinteger

我使用facebook SDK向facebook API发出请求以获取用户基本数据。一切正常,但是当我尝试将facebook ID作为NSInteger号码传递时,返回的号码是错误的。

Facebook ID为:100001778401161 但在将数字转换为NSInteger后,返回的数字是:2054848393

如何将facebook ID存储在NSInteger变量上?

我目前的代码是:

NSLog(@"The ID: %ld", (long)[[user objectForKey:@"id"] intValue])

感谢。

3 个答案:

答案 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);

希望这会对你有帮助!