Конвертировать int64_t в NSInteger - PullRequest
4 голосов
/ 19 марта 2010

Как я могу преобразовать int64_t в NSInteger в Objective-C?

Этот метод возвращает в счет int64_t *, и мне нужно преобразовать его в NSInteger:

[OFHighScoreService getPreviousHighScoreLocal:score forLeaderboard:leaderboardId];

Спасибо.

Ответы [ 2 ]

6 голосов
/ 19 марта 2010

Они должны быть напрямую совместимы на 64-битной машине (или если вы строите с NS_BUILD_32_LIKE_64):

NSInteger i = *score;

Документация указывает, что определение 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

Так что на 32-битной машине у вас могут возникнуть проблемы с усечением. На моей машине вот это утверждение:

NSLog(@"%d %d", sizeof(int64_t), sizeof(NSInteger));

дает этот вывод:

2010-03-19 12:30:18.161 app[30675:a0f] 8 8
2 голосов
/ 20 марта 2010

Проблема была в моем коде:

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

Для работы должно быть:

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

И с этим кодом я могу, очевидно, сделать:

NSInteger newScore = score;

Спасибо.

...