Card
次のようなタイプのオブジェクトを返すコードがあります。
-(Card*) drawRandomCard {
if ([self.cards count]) {
unsigned index = arc4random() % self.cards.count;
Card *randomCard = self.cards[index];
[self.cards removeObjectAtIndex:index];
NSLog(@"%@", randomCard.description); **//returns a description and not null**
return randomCard;
} else {
NSLog(@"nil");
return nil;
}
}
これは、他の関数で使用すると実際には正常に機能しますが、以下のこれには問題があります。
- (IBAction)addCards:(UIButton *)sender {
int numberOfCardsToAdd = EXTRA_CARDS_NUMBER;
if ([[self.collectionView visibleCells] count] == 0) {
numberOfCardsToAdd = self.startingCardCount;
}
for (int i = 0; i < numberOfCardsToAdd; i++) {
if (!self.game.deck.isEmpty){
Card *cardToAdd = [self.game.deck drawRandomCard];
NSLog(@"%@", cardToAdd.description); **// gives (null)**
if (cardToAdd) { **// this does not get called**
// do stuff with cardToAdd
}
}
}
[self.collectionView reloadData];
}
そのため、何らかの理由で mydrawRandomCard
が上記のメソッドで呼び出されたときに機能しないようです。これを修正する方法を知っている人はいますか?
どうもありがとう!
deck
編集:プロパティを持つゲームオブジェクトを初期化するための私の方法:
- (id) initWithNumberOfCards: (int) numberOfCards withDeck: (SetsPlayingDeck *) deck {
self = [self init];
self.score = 0;
_deck = deck;
_cards = [[NSMutableArray alloc] initWithCapacity:numberOfCards];
for (int i = 0; i < numberOfCards; i++) {
[_cards addObject: [_deck drawRandomCard]];
}
return self;
}
このメソッドは、プログラムの開始時に呼び出されます。
編集#2:
以下は、ゲーム オブジェクトとそのプロパティであるデッキ オブジェクトを初期化するコードです。
- (SetsGame *) game {
if (!_game) {
SetsPlayingDeck *deck = [[SetsPlayingDeck alloc] init];
_game = [[SetsGame alloc] initWithCardCount:self.startingCardCount usingDeck:deck];
}
NSLog(@"%@", _game.deck.description); **// this returns null!!**
return _game;
}