Objective-C で int64_t を NSInteger に変換するにはどうすればよいですか?
このメソッドはスコアに int64_t* を返します。これを NSInteger に変換する必要があります。
[OFHighScoreService getPreviousHighScoreLocal:score forLeaderboard:leaderboardId];
ありがとうございました。
Objective-C で int64_t を NSInteger に変換するにはどうすればよいですか?
このメソッドはスコアに int64_t* を返します。これを NSInteger に変換する必要があります。
[OFHighScoreService getPreviousHighScoreLocal:score forLeaderboard:leaderboardId];
ありがとうございました。
NS_BUILD_32_LIKE_64
これらは 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
問題は私のコードにありました:
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;
ありがとうございました。