0

私のアプリが起動すると、グリッド上の座標のキーを持つ乱数の値を辞書に追加することでループします。コードの一部を次に示します。

[grid setObject:v forKey:k];

K は「xy」形式の文字列で、x と y は 1 桁の整数で、V は NSNumber です。これらは両方とも、追加する前にコンソールに記録されるため、これらが問題ではないことはわかっています。ただし、このコードが 49 回実行されているにもかかわらず (7 x 7 グリッドの場合)、ディクショナリは最後に空です。

グリッドはヘッダー ファイルで次のように定義されています。

NSMutableDictionary *grid;

そして、コードを使用して、アプリの読み込み時に初期化しました(ただし、これを行う必要があるかどうかはわかりません):

grid = [[[NSMutableDictionary alloc] init] retain];

私は Objective-C を学び始めたばかりで、C# と Python のはるかに寛容な世界から来たので、これは私を本当に混乱させます。

助けてくれてありがとう!

4

1 に答える 1

3

nilObjective-Cでは、 (nullC#の世界での参照)にメッセージを送信することは合法であり、一般的です。結果はnilであり、そのため、多くの場合、サイレントに通過します。これに頭を悩ませると、コードを非常にクリーンにする(nullのチェックなどがない)非常に便利なツールになります。したがって、辞書にエントリを追加する行にブレークポイントを設定します。これを行うには、Xcodeの行の横にあるガターをクリックします。ブレークポイントをオンにしてアプリケーションを実行します。デバッガーがその行で停止したら、マウスを上に置くことができますgridnil( )だとわかると思います0x0。実行コンソールを開いて入力po gridし、gdbのの説明を出力することもできgridます。繰り返しになりますが、それはゼロであることがわかると思います。

より多くのコードを見なければ、なぜであるかを追跡するのを助けることは不可能gridですnil

-retainちなみに、次の余分なものは必要ありませんalloc/init。Cocoaのメモリ管理プログラミングガイドをお読みください。それはあなたの友達になります。

于 2010-02-19T23:22:00.897 に答える