2012-11-13 3 views
7

I私のMac OS Xアプリケーションで次のコード行がありますのNSLog私に訂正されない警告を与える

NSLog(@"number of items: %ld", [urlArray count]); 

と私は警告を取得:「フォーマットは 『長い』タイプを指定しますが、引数が入力しています'NSUInteger'

しかし、私は自分のコードを変更した場合(別名 'unsigned int型は')」:

NSLog(@"number of items: %u", [urlArray count]); 

私は警告を取得します フォーマットの指定:

フォーマットは、それでは、私は

NSLog(@"number of items: %u", [urlArray count]); 

に変更したが、私は警告を受ける「unsigned int型」とタイプが、引数は(別名「unsigned long型」)「NSUInteger」と入力した

指定します引数には 'NSUInteger'(別名 'unsigned int')型があります。

警告を生成しないようにNSLogを設定するにはどうすればよいですか?私がXcodeの提案に従えば、フォーマット指定子を変更する無限ループに入りますが、警告は消えません。

答えて

14

これは迷惑です。私が信じる32/64ビットのものです。一番簡単な方法は、ちょうどlongにキャストされます。

NSLog(@"number of items: %lu", (unsigned long)[urlArray count]); 
6

ユニバーサルアプリケーションのためのportability guideは、この場合には、鋳造示唆しています。

NSLog(@"number of items: %ld", (unsigned long)[urlArray count]); 
+0

ではなく、不必要なようだが、それは、警告をクリアありません。 – Jackson

+3

違いがあるのか​​どうかはわかりませんが、フォーマット指定子と同じ型にするべきです。 (unsigned long)は%lu、(long)は%ldになります –

+0

@darren違いがありますが、そうしないと未定義の動作になります。 –