0

私はobjective-cでiphoneアプリに取り組んでいますが、クラス変数から配列を作成するのに問題があります。たとえば...

私はという名前のクラスを持っていてCube、配列であるmapという名前のこのクラスのインスタンスを作成しようとしています。

Cube map[10][10];

Xcodeはそれがエラーであると言い、私がこれを行うことを提案します

Cube *map[10][10];

^クラスで定義したメソッドの1つにアクセスできませんが、この方法でこれを行うと、Cubeこれがすべてのメソッドではなくなり、呼び出しようとすると機能しない単一のメソッドになります。このメソッドの唯一の違いは、パラメーターを渡すことです。クラス宣言と定義はCubeどちらも完璧にコンパイルされます。

ポインタに変えずに2次元のクラスを作成する方法を誰かに説明してもらえますか?また、xcodeがポインターにすることを推奨するのはなぜですか?また、このようにするとメソッドが機能しないのはなぜですか?

4

3 に答える 3

2

NSArrayおそらく、NSMutableArrayCスタイルの配列の代わりにCocoaスタイルの配列を使用することをお勧めします。これははるかに柔軟性があり、Objective-cオブジェクトで動作するように設計されています。Cocoaアレイの使用に関するこの簡単なチュートリアルをご覧ください:http://iphonelearning.wordpress.com/2011/08/24/nsarray-and-nsmutablearray/

于 2012-07-01T01:18:48.770 に答える
2

Objective-Cでのこれに対する標準的なアプローチNSArray(or NSMutableArray)は、NSArray(またはNSMutableArray)のを作成することです。配列オブジェクトを作成した後で配列を操作できるようにしたい場合、コードは次のようになります。

NSMutableArray* cubeGrid = [NSMutableArray new]; // Note that this code assumes you are using ARC.

// add row 1
NSMutableArray* cubeRow1 = [NSMutableArray arrayWithObjects:cube1,cube2,cube3,nil]; // you will need to add cube 4 to 10 in the real code
[cubeGrid addObject:cubeRow1];

// add row 2
NSMutableArray* cubeRow2 = [NSMutableArray arrayWithObjects:cube11,cube12,cube13,nil]; // you will need to add cube 14 to 20 in the real code
[cubeGrid addObject:cubeRow2];

// and you will create the rest of the rows and add to the cubeGrid array

要素にアクセスするには、次のようにします。

for (id cubeRow in cubeGrid) {
    if ([cubeRow isKindOfClass:[NSArray class]]) {
        for (id cube in (NSArray*)cubeRow) {
            if ([cube isKindOfClass:[Cube class]]) {
                // Do things with cube
            }
        }
    }
}

また、アクセスしようとしているメソッドがヘッダーファイルで宣言されているかどうかを再確認することもできます。

于 2012-07-01T02:47:04.497 に答える
0

あなたはこの答えを見てみたいと思うかもしれません。

于 2012-07-01T01:32:48.913 に答える