我正试图用一副扑克牌填充我的nsmutablearray。卡片对象有套装和等级。代码如下:
-(void)loadCardNumbers {
if(numDecks > 0)
{
//for each deck
for(int i = 1; i<= numDecks; i++)
{
//for each suit
for(int j = 1; j <= 4; j++)
{
//for each card 1-ace
for(int k = 1; k <= 13; k++)
{
//create card and add to shoe
Card *c = [[Card alloc]initWithSuit:j AndRank:k];
NSLog(@"%@", c);
[cards addObject:c];
}
}
}
}
卡片类:
@implementation Card
//return ace of spades, arbitrary card.
-(id)init
{
return [self initWithSuit:DIAMONDS AndRank:ACE];
}
-(id)initWithSuit:(int)s AndRank:(int)r
{
self = [super init];
if(self)
{
suit = s;
rank = r;
}
return self;
}
-(int)suit
{
return suit;
}
-(int)rank
{
return rank;
}
-(NSString *) description
{
return [NSString stringWithFormat:@"CARD WITH SUIT %d AND RANK %d", suit, rank];
}
@end
出于某种原因,NSLog在方法中看起来是正确的(正确打印1 ... 4为套装,1 ... 13为等级)。 但是,当我在方法完成后调用数组上的描述时,所有对象都打印“suit 4 rank 13”,这意味着它们都指向我添加的最后一个对象。关于如何解决这个问题的任何想法?
编辑:正如arkku指出的那样,我的ivars被声明为类变量。忘了在Card.h中包含我的ivars周围的花括号
答案 0 :(得分:0)
原始Card.h实施:
int suit;
int rank;
@interface Card : NSObject
-(id)init;
...
使用arkku的建议正确实施:
@interface Card : NSObject
{
int suit;
int rank;
}
-(id)init;
...