为什么角色显示为旋转'?'

时间:2012-09-09 00:05:52

标签: objective-c properties char

我的项目是制作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

但是在董事会上我尝试了很多方法,但没有成功 这是打印出检查器的代码

DrawCell[ 3 ].checker  = 'X';

结果是旋转问号 所有这些数字都是0,我试图改变它们,但它们都是0

感谢

1 个答案:

答案 0 :(得分: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';

应该可以正常工作。

有些人可能会建议您使用NSArray而不是C风格的数组,但在您使用小型固定大小的数组的情况下,后者就可以了。

其他人可能会建议你甚至不要为此而烦恼,因为你似乎只存储了两个简单的数据。在这种情况下使用结构可能是一个很好的选择,例如使用方法:

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

Cell DrawCell[9];

和你的行

DrawCell[3].checker = 'X';

也可以工作,不需要动态内存分配,属性合成等。

HTH