2012-03-02 2 views
0

У меня есть класс под названием KCBlackjack. Класс содержит этот код:Невозможно добавить объект в NSMutableArray

playerHand = [[NSMutableArray alloc] init]; 
dealerHand = [[NSMutableArray alloc] init]; 

blackjack = [[KCBlackjack alloc] initWithNumberOfDecks:6]; 
[self deal]; 

[blackjack dealTo:playerHand dealer:dealerHand]; 

- (void)dealTo:(NSMutableArray *)player dealer:(NSMutableArray *)dealer { 
    // How many cards are left 
    NSLog(@"Cards in Deck: %d", [_decks count]); 

    // Deal to player then dealer 
    for (int i = 0; i <= 1; i++) { 
     [player addObject:[_decks lastObject]]; 
     [_decks removeLastObject]; 

     NSLog(@"%@", player); 

     if(_delegate && [_delegate respondsToSelector:@selector(didDistributeCard:withValue:)]) { 
      KCCard *aCard = (KCCard *)[player objectAtIndex:player.count-1]; 
      [_delegate didDistributeCard:aCard to:player withValue:[aCard value]]; 
     } 

     [dealer addObject:[_decks lastObject]]; 
     [_decks removeLastObject]; 

     NSLog(@"%@", dealer); 

     if(_delegate && [_delegate respondsToSelector:@selector(didDistributeCard:withValue:)]) { 
      KCCard *aCard = (KCCard *)[dealer objectAtIndex:dealer.count-1]; 
      [_delegate didDistributeCard:aCard to:dealer withValue:[aCard value]]; 
     } 
    } 

    NSLog(@"Done Dealing"); 

    NSLog(@"Cards Remaining in Deck: %d", [_decks count]); 

    NSLog(@"Player: %@\n\n", player); 
    NSLog(@"Dealer: %@\n\n", dealer); 
} 

Внутри моего игрового контроллера, я поставил player к моему массиву игрока, а также дилер HIS. Однако, когда это выполняется, оно не работает. Никакие объекты не добавляются в массив игроков, которым назначен игрок или дилер.

Когда код находится в игровом контроллере, он работает, но не в этом классе. Я считаю, что что-то не инициализируется, но в игровом контроллере игрок и дилер инициализируются.

+0

Проверьте, что вы инициализировали NSMutableArray в этом классе. –

+0

Какой класс? Мой KCBlackjack или контроллер просмотра игры? – Alec

+1

Можете ли вы более четко указать, какие части не работают? Когда вы добавляете точку останова/NSLog после добавления объекта в ваш игровой массив, добавляет ли он [_decks lastObject]? –

ответ

1

Если вы думаете об этом с точки зрения ОО, дилер и игрок действительно являются объектами, которые должны получать сообщение, такое как addCardToHand: (Card ) aCard. То, как вы это делаете, Лукас прав, вы получаете копию своего массива, который не изменяет. Я бы предпочел увидеть некоторую точечную нотацию, такую ​​как player.hand addCard: (Card) aCard, если вы не хотите, чтобы игрок сам обрабатывал карту (смотрите на карту острых острых ощущений! :-)).

Я думаю, что если вы реорганизуете объекты, вы можете иметь чистый код, который работает, и, вероятно, избавиться от этого материала делегирования (что немного запутывает только чтение).

Удачи - блэкджек - это весело!

Damien

+1

Я действительно узнал, что это идет к плееру и всему время! Но когда я включил делегата, он изменил мои анимации карт, и они никогда не показывались. Проблема решена, и делегат отлично работает! Благодарю. – Alec

+0

Я не правильно рассмотрел вопрос, и я забыл, что в него был передан NSMutableArray, на который будут влиять сообщения, отправленные этому объекту в методе. Если бы это был просто NSArray, тогда он был бы изменен на другой адрес, если бы он был настроен на что-то еще. –

+0

Спасибо, Лукас, что помог мне. – Alec