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 を出力するために正しく機能する 1 つの形式を持つことはできません (ただし、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 に答える