0

警告 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

警告告诉我:“不应将“NSInteger”类型的值用作格式参数;改为将显式转换添加到“long”。

我可以知道是否有任何方法可以解决此警告.... 还是我必须使用“long”来制作 %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];
4

2 回答 2

0

编译器可以为您进行这些格式更改,因此没有理由不进行这些更改。

请记住,NSInteger 和 NSUInteger 的基础类型在 32 位和 64 位处理器上(有意)是不同的,因此您不能使用一种格式在 32 位和 64 位上都可以正常打印 NSInteger(除非您可以尝试 z 哪个适用于 size_t)。

于 2014-09-08T10:13:22.673 回答
0

这是因为 srandom(<#unsigned int#>)拿来unsigned int作为论据。如果你检查,typedef long __darwin_time_t; /* time() */long类型。这就是您收到此警告的原因。

虽然很奇怪,但它并没有发生在我身上在此处输入图像描述(当然我是在写完这一行之后构建项目):

于 2014-09-08T09:56:06.973 回答