-1

私のプロジェクトは Checker トルコ語ゲームを作ることです

ボードとセルの2つのクラスを作成しました

Cell.hで

#import <Foundation/Foundation.h>

@interface Cell : NSObject

{
    int number;
    char checker;
}
@property (nonatomic ) int number;
@property (nonatomic ) char checker;
@end

そしてCell.mで

#import "Cell.h"

@implementation Cell
-(void)Cell{
    checker=' ';
    number=1;
}
@end

しかし、board.mでは多くの方法を試しましたが、ここで成功しなかったのは、チェッカーを出力するコードです

DrawCell[ 3 ].checker  = 'X';

結果は回転し、疑問符も表示されます。数字はすべて0で、変更しようとしていますが、0と表示されます

ありがとう

4

1 に答える 1

1

メソッドを示す実装Cellは、コンストラクターがクラスにちなんで名付けられた C++ から来た可能性があることを示唆しています。Objective-C はこれを別の方法で行います。あなたに一致する実装@interfaceは次のとおりです。

@implementation Cell

@synthesize number, checker; // implement the properties, not required in Xcode 4.4

- (id) init // the constructor
{
   self = [super init]; // must invoke superclass init
   if(self != nil)      // check a valid object reference was returned
   {
      checker = ' ';
      number = 1;
   }
   return self;         // return the initialized object
}

@end

DrawCellの静的配列を宣言しているように見えます。次のようなCell *ものです。

Cell *DrawCell[9];

この配列にセルを割り当てる必要があります。ループでそれを行うことができます。

for(unsigned ix = 0; ix < 9; ix++)
   DrawCell = [[Cell alloc] init]; // allocate & init each Cell

今あなたの行:

DrawCell[3].checker = 'X';

正常に動作するはずです。

NSArrayC スタイルの配列ではなくを使用することを提案する人もいるかもしれませんが、小さな固定サイズの配列の場合は後者で問題ありません。

他の人は、2 つの単純なデータしか格納していないように見えるため、このためのオブジェクトを気にする必要さえないと提案するかもしれません。この場合、構造体を使用するのが適切な選択です。たとえば、次のように使用します。

typedef struct
{
   int number;
   char checker;
} Cell;

Cell DrawCell[9];

そしてあなたのライン

DrawCell[3].checker = 'X';

も機能し、動的メモリ割り当て、プロパティ合成などは必要ありません。

HTH

于 2012-09-09T02:38:48.403 に答える