不能将对象添加到NSMutableArray
问题描述:
我有一个类叫做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
到我的播放器阵列以及经销商自己。但是,当它运行时,它不起作用。没有物体被添加到该玩家或庄家分配的玩家阵列中。
当代码在游戏控制器中时,它可以工作,但不在此类中。我认为有些东西没有初始化,但是在游戏控制器中,玩家和经销商都初始化了。
答
如果您从面向对象的角度思考它,经销商和玩家确实应该会收到诸如addCardToHand之类的消息:(Card )aCard。你做这件事的方式,卢卡斯完全正确,你得到他的数组副本不可变。我宁愿看到一些点符号,如player.hand addCard:(卡)aCard,如果你不想让玩家自己处理卡(注意卡锐利!:-))。
我认为,如果你重构对象,你可以有干净的代码工作,并可能摆脱委派的东西(这有点令人困惑,只是阅读)。
祝你好运 - 二十一点很有趣!
Damien
检查您是否已经初始化此类中的NSMutableArray。 – 2012-03-02 06:25:36
哪一类?我的KC黑客或游戏视图控制器? – Alec 2012-03-02 06:26:45
你能更清楚地知道哪些部件不能工作吗?在将对象添加到播放器数组后,当您添加断点/ NSLog时,它是否实际添加了[_decks lastObject]? – 2012-03-02 06:28:17