NSMutableArray没有添加任何addObjectsFromArray

时间:2011-06-24 03:06:19

标签: objective-c count nsmutablearray nsarray

我正在测试卡片游戏的AI,当我注意到 NSMutableArray 对象的 count 方法在使用 addObjectsFromArray <之后从未增加时出现问题/ em>方法。我不仅在测试中使用 addObjectsFromArray ,而且在AI中添加 NSArray (或 NSMutableArray )的方法,以及没有任何补充。在测试中,我创建了一个完整的52张卡片,随机播放,然后将卡片分配给3个AI和一个额外的 NSMutableArray 。然后我看到人工智能已经拥有的牌,然后看看每个人工智能在轮到一个值时播放的内容,然后将其播放的牌添加到手中然后再转到下一个AI。

以下是代码:

for(int k = 1; k < 14; k++)
{
     NSLog(@"-|-|-|-|-|- Current Value: %i", k);
     NSLog(@"----- Easy");
     [discard addObjectsFromArray:(NSArray*)[easy playHand:(NSUInteger)k]];
     NSLog(@"Discard's Count: %i", [discard count]);
     for(Card* cd in discard)
     {
         NSLog(@"card displayed = true");
         [cd displayCard];
         NSLog(@"card displayed = true");
     }
     //[discard makeObjectsPerformSelector:@selector(displayCard)];
      [easy addCards:discard];
      [discard removeAllObjects];

      NSLog(@"------ Medium");
     blah = (NSArray*) [Medium playHand:k];
     [discard addObjectsFromArray:blah];
     NSLog(@"Discard's Count: %i", [discard count]);
     //[discard addObjectsFromArray:[Medium playHand:(NSUInteger)k]];
     for(Card* cd in discard)
     {
         [cd displayCard];
     }
     //[discard makeObjectsPerformSelector:@selector(displayCard)];
      [Medium addCards:discard];
      [discard removeAllObjects];

      NSLog(@"------ Hard");
      [discard addObjectsFromArray:[HARD playHand:(NSUInteger)k]];
     for(Card* cd in discard)
     {
         [cd displayCard];
     }
     //[discard makeObjectsPerformSelector:@selector(displayCard)];
      [HARD addCards:discard];
      [discard removeAllObjects];
      NSLog(@" ");
      NSLog(@" ");
 }

从这里开始,丢弃应该抓住playHand播放的牌,返回 NSMutableArray ,而 addObjectsFromArray 获取 NSArray (全部指针,当然)。我不应该使用下面的行直接传递它们吗?

[discard addObjectsFromArray:[easy playHand:k]];

使用单独的指针快速解决方法也不起作用:

NSArray* blah = nil;
blah = [easy playHand];
[discard addObjectsFromArray:blah];

...或使用指针进行类型转换(我测试了它并且它不起作用):

NSArray* blahblah = nil;
blahblah = (NSArray*)[easy playHand:k];
[discard addObjectsFromArray:blahblah];

我做错了什么?这不是自动类型转换,还是我需要使用其他形式的类型转换?或者还有其他我忽略的东西?我会尝试让它返回 NSArray ,但AI类中的容器是 NSMutableArray ,所以我可以轻松地添加卡片而不创建每个数组的副本添加/删除卡对象的时间。 (PS:是的,所有事情都是事先正确创建的,我只是剪掉那部分因为它使代码片段很长。而额外的 NSMutableArray 持有剩下的13张卡计数使用 addObject 返回13,但丢弃的计数永远不会从0更改。)

1 个答案:

答案 0 :(得分:0)

通常的问题是discardnil。我没有看到它被初始化所以我猜这也是这种情况。