How can i convert int64_t to NSInteger in Objective-C ?
This method returns into score an int64开发者_高级运维_t* and I need to convert it to NSInteger:
[OFHighScoreService getPreviousHighScoreLocal:score forLeaderboard:leaderboardId];
Thank you.
They should be directly compatible on a 64-bit machine (or if you build with NS_BUILD_32_LIKE_64
):
NSInteger i = *score;
The documentation indicates that the definition of NSInteger
looks like this:
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
So on a 32-bit machine you might have some truncation issues to deal with. On my machine here, this statement:
NSLog(@"%d %d", sizeof(int64_t), sizeof(NSInteger));
gives this output:
2010-03-19 12:30:18.161 app[30675:a0f] 8 8
The problem was on my code:
int64_t *score;
[OFHighScoreService getPreviousHighScoreLocal:score forLeaderboard:leaderboardId];
NSLog(@"------------------------- %d", *score);
To work it should be:
int64_t score;
[OFHighScoreService getPreviousHighScoreLocal:&score forLeaderboard:leaderboardId];
NSLog(@"------------------------- %qi", score);
And with this code i can obviously do:
NSInteger newScore = score;
Thank you.
精彩评论