2013-08-06 32 views
0

我向facebook API發送了一個請求,使用facebook SDK獲取用戶基本數據。一切正常,但當我嘗試通過Facebook的ID作爲NSInteger號碼返回的號碼是錯誤的。NSInteger和facebookId

Facebook的ID爲:100001778401161 但是轉換後NSInteger的數目返回的號碼爲:2054848393

我怎麼能存儲在一個NSInteger的變量Facebook的ID?

我當前的代碼是:

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

感謝。

+0

只是將它存儲爲一個字符串。不需要將其轉換爲整數 –

+0

好的,但我需要將它作爲一個數字來處理,這是我的問題。 – GodFather

+0

然後像你這樣轉換它... [string intValue] – heinst

回答

3

這樣的數字需要64位,NSInteger只覆蓋32位(並且正數只有31位)。嘗試使用長長值:

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

如果需要將其存儲爲一個對象以某種方式還可以使用的NSNumber:

NSNumber *number=[NSNumber numberWithLongLong:[user[@"id"] longLongValue]]; 
+0

謝謝,這正是我所需要的。 – GodFather

0

NSInteger的(和長)是一個32位的值和ID你正在使用超過它可以容納的最大值,所以它溢出。您可以嘗試:

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

我對facebook API一無所知,因此您可能想確保ID隨時間保證爲數字。例如,如果他們指定ID是字符串的地方,即使它們看起來總是數字,也應該匹配。

0

不能存儲數量大於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); 

希望這會對你有幫助!