【问题标题】:NSMutableArray not adding anything with addObjectsFromArrayNSMutableArray 不使用 addObjectsFromArray 添加任何内容
【发布时间】:2011-09-21 17:12:01
【问题描述】:

我正在测试一款纸牌游戏的 AI,当我注意到 NSMutableArray 对象的 count 方法在使用其 addObjectsFromArray 方法。我不仅在测试中使用了 addObjectsFromArray,而且在 AI 的方法中添加了一个 NSArray(或 NSMutableArray),并且在两者中情况下,没有添加任何内容。在测试中,我创建了一个完整的 52 张牌组,洗牌,然后将牌发给 3 个 AI 和一个额外的 NSMutableArray。然后我会查看 AI 已经拥有哪些牌,然后查看每个 AI 轮流打出的牌值,然后将其打出的牌加回手上,然后再继续下一个 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(@" ");
 }

从这里,discard 应该是接住 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:是的,一切都是事先正确创建的,我只是剪掉了那部分,因为它使代码 sn-p 很长。并且额外的 NSMutableArray 包含剩余的 13 张卡有 count 使用 addObject 返回 13,但丢弃的计数永远不会从 0 改变。)

【问题讨论】:

    标签: objective-c count nsmutablearray nsarray


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-19
      • 2022-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多