У меня есть кусок кода, который возвращает объект типа 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];
}
Так почему-то кажется, что я drawRandomCard
, когда вызывается с описанным выше способом, не работает. Кто-нибудь знает, как это исправить?
Большое спасибо!
Edit: мой метод для инициализации игрового объекта, который имеет свойство 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;
}
Этот метод вызывается в самом начале программы.
Edit # 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;
}
Вы проверили, что 'self.game' и' self.game.deck' оба не 'nil'? Вы установили точку останова в отладчике и однократно вошли в этот метод, чтобы найти проблему? –
Я уже пробовал отладчик, но я просто проверил, как вы сказали, и 'self.game' не' nil', а 'self.game.deck'. Я не понимаю, почему, поскольку 'deck' является сильным' @ свойством' 'self.game', и я его настроил, когда я инициализировал объект' game'. – merah
Вы правильно инициализируете свойство «колода»? Вы уверены, что он уже инициализирован к тому времени, когда вы попытаетесь получить к нему доступ? Боюсь, не увидев больше кода, будет очень сложно определить проблему. – LuisCien