Convertire int64_t a NSInteger
-
21-09-2019 - |
Domanda
Come posso convertire int64_t a NSInteger in Objective-C?
Questo metodo restituisce in segno di int64_t * e ho bisogno di convertirlo in NSInteger:
[OFHighScoreService getPreviousHighScoreLocal:score forLeaderboard:leaderboardId];
Grazie.
Soluzione 2
Il problema era il mio codice:
int64_t *score;
[OFHighScoreService getPreviousHighScoreLocal:score forLeaderboard:leaderboardId];
NSLog(@"------------------------- %d", *score);
Per lavorare dovrebbe essere:
int64_t score;
[OFHighScoreService getPreviousHighScoreLocal:&score forLeaderboard:leaderboardId];
NSLog(@"------------------------- %qi", score);
E con questo codice Io, ovviamente, posso fare:
NSInteger newScore = score;
Grazie.
Altri suggerimenti
Dovrebbero essere direttamente compatibile su una macchina a 64-bit (o se si costruisce con NS_BUILD_32_LIKE_64
):
NSInteger i = *score;
Il documentazione indica che la definizione di NSInteger
assomiglia a questo:
#if __LP64__ || TARGET_OS_EMBEDDED || TARGET_OS_IPHONE || TARGET_OS_WIN32 || NS_BUILD_32_LIKE_64
typedef long NSInteger;
#else
typedef int NSInteger;
#endif
Quindi, su una macchina a 32 bit si potrebbe avere alcuni problemi di troncamento da affrontare. Sulla mia macchina qui, questa dichiarazione:
NSLog(@"%d %d", sizeof(int64_t), sizeof(NSInteger));
dà questo output:
2010-03-19 12:30:18.161 app[30675:a0f] 8 8
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow