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.

È stato utile?

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
scroll top