无法将对象添加到NSMutableArray

时间:2012-03-02 06:14:21

标签: objective-c cocoa-touch

我有一个名为KCBlackjack的班级。该类包含以下代码:

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设置为我的播放器阵列以及经销商。但是,当它运行时,它不起作用。没有任何对象被添加到播放器或经销商分配的播放器阵列中。

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

1 个答案:

答案 0 :(得分:1)

如果你从OO的角度考虑它,经销商和玩家真的是应该收到诸如addCardToHand:(Card )aCard之类的消息的对象。你这样做的方式,卢卡斯完全正确,你得到他的数组的副本,这是不可变的。我更愿意看一些点符号,如player.hand addCard :(卡)aCard,如果你不希望玩家自己处理卡(注意卡片锐利!:-))。

我认为如果您使用对象进行重构,您可以使用干净的代码,并且可能会删除该委托内容(这有点让人感到困惑)。

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

达明