Преобразуйте int64_t в NSInteger

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

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

[OFHighScoreService getPreviousHighScoreLocal:score forLeaderboard:leaderboardId];

Спасибо.

5
задан Hugo Costa 19 March 2010 в 19:22
поделиться

2 ответа

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

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;

Спасибо.

2
ответ дан 14 December 2019 в 01:05
поделиться

Они должны быть напрямую совместимы на 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
7
ответ дан 14 December 2019 в 01:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: