将int64_t转换为NSInteger

Hug*_*sta 5 casting objective-c nsinteger

如何在Objective-C中将int64_t转换为NSInteger?

这个方法返回得分为int64_t*,我需要将其转换为NSInteger:

[OFHighScoreService getPreviousHighScoreLocal:score forLeaderboard:leaderboardId];
Run Code Online (Sandbox Code Playgroud)

谢谢.

Car*_*rum 7

它们应该在64位计算机上直接兼容(或者如果你构建的话NS_BUILD_32_LIKE_64):

NSInteger i = *score;
Run Code Online (Sandbox Code Playgroud)

文件指出的定义NSInteger如下所示:

#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
Run Code Online (Sandbox Code Playgroud)

因此,在32位计算机上,您可能会遇到一些截断问题.在我的机器上,这句话:

NSLog(@"%d %d", sizeof(int64_t), sizeof(NSInteger));
Run Code Online (Sandbox Code Playgroud)

给出这个输出:

2010-03-19 12:30:18.161 app[30675:a0f] 8 8
Run Code Online (Sandbox Code Playgroud)


Hug*_*sta 2

问题出在我的代码上:

int64_t *score; 
[OFHighScoreService getPreviousHighScoreLocal:score forLeaderboard:leaderboardId];
NSLog(@"------------------------- %d", *score);
Run Code Online (Sandbox Code Playgroud)

要工作它应该是:

int64_t score;  
[OFHighScoreService getPreviousHighScoreLocal:&score forLeaderboard:leaderboardId];
NSLog(@"------------------------- %qi", score);
Run Code Online (Sandbox Code Playgroud)

通过这段代码我显然可以做到:

NSInteger newScore = score;
Run Code Online (Sandbox Code Playgroud)

谢谢。