警告1: 我正在按照教程创建一个应用程序,我需要使用srandom(time(NULL))。我在互联网上查了一下,发现arc4random可以解决这个问题,但是没有足够的信息让我知道如何解决。警告表明 -
'隐式转换失去整数精度:' time_t' (又名' long')到' unsigned int'
这是我使用srandom的代码。
- (void) shuffle {
NSMutableArray *validMoves = [[NSMutableArray alloc] init];
srandom(time(NULL)); // warning is here
for( int i=0; i<SHUFFLE_NUMBER; i++){
[validMoves removeAllObjects];
警告2
警告告诉我:&#39;类型的值&#34; NSInteger&#34;不应该用作格式参数;添加一个显式的强制转换为&#34; long&#34;代替&#39;
我能否知道是否有任何方法可以解决此警告....或者我是否必须使用&#39; long&#39;来定义%d%ld?
if ([prefs boolForKey:@"Refresh"] == TRUE) {
countmove = 0;
thetime = 0;
if (timer != nil) {
[timer invalidate];
timer = nil;
}
NSString *Pic = [NSString stringWithFormat:@"image%d.png", [prefs integerForKey:@"PuzzlePicture"]];
[self initPuzzle:Pic];
答案 0 :(得分:0)
这是因为srandom(<#unsigned int#>)
以unsigned int
为参数。如果您检查,typedef long __darwin_time_t; /* time() */
属于long
类型。这就是你得到这个警告的原因。
虽然很奇怪但是并没有发生这种情况(当然我在编写这一行后构建了项目):
答案 1 :(得分:0)
编译器可以为您进行这些格式更改,因此没有理由不对它们进行更改。
请记住,NSInteger和NSUInteger的基础类型在32位和64位处理器(有意)上是不同的,因此您无法使用一种格式正确地在32位和64位上打印NSInteger(除了可以尝试z用于size_t)。