0

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

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

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

我目前的代码是:

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

谢谢。

4

3 回答 3

3

这样的数字需要 64 位,NSInteger 仅涵盖 32 位(正数仅涵盖 31 位)。尝试使用 long long 值:

NSLog(@"The ID: %lld", [[user objectForKey:@"id"] longLongValue]);

如果您需要以某种方式将其存储为对象,您也可以使用 NSNumber:

NSNumber *number=[NSNumber numberWithLongLong:[user[@"id"] longLongValue]];
于 2013-08-06T18:33:56.953 回答
0

NSInteger(和 long)是一个 32 位值,并且您使用的 ID 超过了它可以容纳的最大值,因此它会溢出。你可以试试:

long long facebookId = [[user objectForKey: @"id"] longLongValue];
NSLog(@"The ID: %lld", facebookId);

我对 facebook API 一无所知,因此您可能希望确保 ID 随着时间的推移保证为数字。例如,如果他们在某处指定 ID 是一个字符串,那么即使它们似乎总是数字,您也应该匹配它。

于 2013-08-06T18:37:25.550 回答
0

您不能在类型中存储大于 2 ^ 31 的数字NSInteger。如果你想存储一个更大的,那么你可以使用NSDecimalNumberobject 来代替。或者你可以使用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);

希望对你有帮助!

于 2013-08-06T18:41:17.620 回答