2011-06-18 15 views
3

私はいくつかの同様の質問が表示されますが、単純な答えはありません。私は本当に私の実際のプロジェクトでそれらを使用する前に、それらのための感触を得るためにNSMutableArrayのと一緒に遊んでいるだけです。何らかの理由で、配列のカウントを呼び出そうとするとEXC_BAD_ACCESSエラーが発生し、その理由がわかりません。NSMutableArrayのcountメソッドが不正なアクセスエラーを引き起こしますか?

カウント方法を除いて、すべての挿入とアクセスが問題なく動作します。なぜこれが機能していないのかわかりませんし、何か助けていただければ幸いです。ありがとう!

答えて

2

[test count]は、NSUIntegerNSObject)のポインタではないことを返します。代わりにこれを試してみてください:

NSLog(@"%u", [test count]); 

%dを使用しても動作しますが、%uが好ましいです。

+0

戻り値は 'NSUInteger'なので、'%d'の代わりに '%u'を使うべきです。 – DarkDust

+0

@ダークダスト:まったく正しい。私はその答えを修正しました。 – PengOne

+0

厳密に%uは符号なし整数であり、NSUIntegerは符号なし整数である可能性が高くなります。 –

8

%@フォーマット指定子は、オブジェクトを出力します。 -countの戻り値は単なる符号なし整数です。そのタイプにはフォーマット指定子%uを使用する必要があります。

+0

Hmm、ok。どうもありがとう!間違ったフォーマット指定子を持っているだけの奇妙なエラーのようです。 – TNTisCOOL

+4

@TNTisCOOL:いいえ、それがクラッシュする理由がわかったら変なことはありません。 '%@'指定子は、オブジェクトの*アドレス*が必要で、その上に '[theObject description]'を呼びたいと思っています。 '[test count]'を使うと実際には3のような数字が渡され、それはアドレスとして解釈されますが、 '3'は無効なアドレスになり、それにアクセスしようとすると参照がクラッシュします。 – DarkDust

+0

ああ、意味がある!ありがとう!私はあなたに最高の投票権を与えるという評判があったといい。 – TNTisCOOL

1

- (NSUInteger)count;は、NSUIntegerを返します。

ではなく、これを使用します。

NSLog(@"%u", [test count]); //bad access here 
+0

それは 'NSInteger'ではなく' NSUInteger'を返します。 –

+0

これはタイプミスです。ありがとう –

+1

Aaand ..明らかにするために、 ''%@ "'形式は手渡された引数が 'NSObject'であると仮定し、メソッド' -description'を呼び出そうとします。 '、しかし' NSUInteger'は単なるプリミティブなので、そのようなメソッドには応答できません。 – Can

0

countはうまく働いています。ただし、サブクラスNSObjectへのポインタではなく、NSUIntegerプリミティブを返します。 %@文字列フォーマッタはオブジェクトへのポイントを要求し、そのオブジェクトの-descriptionメソッドから返されたNSStringを記録します。あなたがそれを渡すとき、NSUIntegerNSLogはそれがオブジェクトポインタであると仮定し、そのアドレスをEXEC_BAD_ACCESSの原因となるメモリアドレス3に-descriptionメッセージを忠実に送信しようとします。

関連する問題