2009-08-23 9 views
0

実行時に生成される2D配列に格納するNSObjectのコレクションがあります。 C#では、私は親しみやすいジェネリックコンテナのいくつかを使用していますが、アイフォーン開発の目的でcを実行する最善の方法はありません。Objective Cの2D配列

私はNSMutableArrayが最適なルートではないと推測しています。私は配列が成長する必要はありません、私はグリッドマネージャが作成されたときに私が望むサイズを知るでしょうが、グリッドは実行時の高さと幅で構築されます。

「NSObject ** gridObjects = alloc ...」の行に沿って何かしなければならないでしょうか?あなたは2次元配列にポインタを格納しようとしている場合は

答えて

0

あなたはいつものObjective-C(あなたがに正当な理由がない限り、私はこれを行うことをお勧めしません)で、プレーンCのものを使用することができます。

NSObject** *twoDArray = malloc(sizeof(NSObject**) * rows); 
for (i = 0; i < rows; ++i) 
    twoDArray[i] = malloc(sizeof(NSObject*) * cols); 

各ブロックのサイズを変更するにはあなたの場合、あなたは(reallocを使用することができます必要でさえ)。使用後はfreeを忘れないでください。

+0

それはうまくいき、クラスのプロパティとして持っていますが、値を割り当てるのに問題があります。タイルタイプで作成しました。 タイル* tile = [[Tile alloc] init]; self.grid [x] [y] = tile; "Incompat types in assignment"というエラーがあります。 –

+0

ああ、考え出しました。必要なタイルタイル*** –

+1

ガベージコレクションと互換性がないため、このソリューションには注意してください。これを回避するにはNSAllocateCollectableを使用できますが、NSArraysのNSArrayもお勧めします。 ここに要素にアクセスするためのカテゴリメソッドを記述するとよいかもしれません。 –

3

、あなたが使用する必要があります:私はちょうどNSArrayのオブジェクト(2D)のNSArrayのを使用することになり

NSObject ***gridObjects