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 が正しく出力されます)。ただし、メソッドの完了後に配列で説明を呼び出すと、すべてのオブジェクトが「スーツ 4 ランク 13」と出力されます。これは、追加した最後のオブジェクトをすべて指していることを意味します。これを修正する方法についてのアイデアはありますか?
編集: arkku が指摘したように、私の ivar はクラス変数として宣言されました。Card.h で ivar を中括弧で囲むのを忘れていました