2016-05-31 7 views
0
NSLog(@"%@",2); 

クラッシュ:フォーマットは、id型を指定しますが、引数が型を持つint型はなぜ「形式は、id型を指定しますが、引数がint型持っている」警告

出力enter image description here

Xcodeは警告を示しているが、実行時になぜこのコードがクラッシュするのでしょうか?ありがとう!

+1

を使用することですか? – Arc676

+0

オブジェクトを待っていて、プリミティブなintを入れます。 '@(2)'の代わりに '%d'を使用してください。 – Larme

+0

詳細については、この[documentation](https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265)を参照してください。 – Gokul

答えて

5

idは、Objective-Cのオブジェクトへのポインタであり、IDタイプの

%する@使用int値です。 Ex。 NSString *またはNSDate *。したがって、%@を使用すると、コンパイラは、オブジェクトが格納されているメモリアドレスへのポインタを期待しています。

intは、「プリミティブ」値タイプです。それはオブジェクトではありません。これはメモリに格納された実際の値で、NSLog文の引数に直接渡されます。

クラッシュする理由は、メモリアドレスへのポインタを探しているプレースホルダに2の値を渡しているためです。それは「悪いアクセス」が意味するものです。 %@は、正確なメモリアドレスポインタを提供していないため、何も検索できません。ここ

修正は無効なパラメータを渡すので

NSLog(@"%d",2); 
0

PLZ

NSLog(@"%d",2); 

2を使用

関連する問題