首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSInteger和facebookId

NSInteger和facebookId
EN

Stack Overflow用户
提问于 2013-08-06 18:18:03
回答 3查看 121关注 0票数 0

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

facebook ID为: 100001778401161,但将号码转换为NSInteger后,返回的号码是: 2054848393

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

我目前的代码是:

代码语言:javascript
复制
NSLog(@"The ID: %ld", (long)[[user objectForKey:@"id"] intValue])

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-06 18:33:56

这样的数字需要64位,NSInteger只覆盖32位(正数只有31位)。尝试使用长长值:

代码语言:javascript
复制
NSLog(@"The ID: %lld", [[user objectForKey:@"id"] longLongValue]);

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

代码语言:javascript
复制
NSNumber *number=[NSNumber numberWithLongLong:[user[@"id"] longLongValue]];
票数 3
EN

Stack Overflow用户

发布于 2013-08-06 18:37:25

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

代码语言:javascript
复制
long long facebookId = [[user objectForKey: @"id"] longLongValue];
NSLog(@"The ID: %lld", facebookId);

我对facebook一无所知,所以您可能需要确保ID随时间的推移是数字的。例如,如果它们指定某个地方的ID是字符串,那么即使它们看起来总是数字的,您也应该匹配它。

票数 0
EN

Stack Overflow用户

发布于 2013-08-06 18:41:17

不能将大于2^ 31的数字存储在NSInteger类型中。如果您想要存储一个较大的,那么您可以使用NSDecimalNumber对象代替。或者您可以使用unsigned long long类型。

代码语言:javascript
复制
NSDecimalNumber *number = [NSDecimalNumber decimalNumberWithString:[user objectForKey:@"id"]];
NSLog(@"Number: %@", number);

unsigned long long ullValue = strtoull([user objectForKey:@"id"], NULL, 0);
NSLog(@"Number: %llu", ullValue);

希望这能帮到你!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18087584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档