2012-03-02 108 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到我的播放器阵列以及经销商自己。但是,当它运行时,它不起作用。没有物体被添加到该玩家或庄家分配的玩家阵列中。

当代码在游戏控制器中时,它可以工作,但不在此类中。我认为有些东西没有初始化,但是在游戏控制器中,玩家和经销商都初始化了。

+0

检查您是否已经初始化此类中的NSMutableArray。 – 2012-03-02 06:25:36

+0

哪一类?我的KC黑客或游戏视图控制器? – Alec 2012-03-02 06:26:45

+1

你能更清楚地知道哪些部件不能工作吗?在将对象添加到播放器数组后,当您添加断点/ NSLog时,它是否实际添加了[_decks lastObject]? – 2012-03-02 06:28:17

回答

1

如果您从面向对象的角度思考它,经销商和玩家确实应该会收到诸如addCardToHand之类的消息:(Card )aCard。你做这件事的方式,卢卡斯完全正确,你得到他的数组副本不可变。我宁愿看到一些点符号,如player.hand addCard:(卡)aCard,如果你不想让玩家自己处理卡(注意卡锐利!:-))。

我认为,如果你重构对象,你可以有干净的代码工作,并可能摆脱委派的东西(这有点令人困惑,只是阅读)。

祝你好运 - 二十一点很有趣!

Damien

+1

我实际上发现它要去的是playerHand整个时间!但是当我加入代表时,它改变了我的卡片动画并且从未显示过。问题解决了,代表作品很棒!谢谢。 – Alec 2012-03-02 06:50:59

+0

雅我没有正确看待这个问题,我忘记了一个NSMutableArray被传入,这将受到方法中发送到该对象的消息的影响。如果它只是一个NSArray,那么如果它被设置为其他东西,它将被改变为不同的地址。 – 2012-03-02 06:56:24

+0

感谢卢卡斯帮助我。 – Alec 2012-03-02 07:03:03

相关问题