iphone-无法从阵列中删除对象

时间:2011-03-20 20:11:35

标签: iphone arrays nsmutablearray

我的应用程序即将完成,但我遇到了问题,我无法从中移除对象 我制作的阵列。

这是我的代码示例:

-(void) TheGame{

  squares = [[NSMutableArray arrayWithObjects: @"a", @"b", @"c", @"d", @"e", @"f", @"g", @"h" ,@"i" ,@"j", @"k", @"l", @"m", @"n", @"o", @"p", @"q", @"r", @"s", @"t", @"aa", @"bb", @"cc",@"dd", @"ee", @"ff", @"gg", @"hh", @"ii", @"jj", @"kk", @"ll", @"mm", @"nn", @"oo", @"pp", @"qq",@"rr", @"ss", @"tt", nil] retain];

  s=40;
  turn=1;

  while(s >= 1)
    if (turn == 1){
      //Check for players move
      //Here I added some if statement, and for every one I added 
      //[squares removeObject: @"b"]; X can be any object of the array.
      turn = 0;
      s = s - 1;
    }

  if (turn == 0){

    //Here the computer should find an object from the array randomly. I used
    //randomN = [squares objectAtIndex:arc4random() % [squares count]];
    //to choose the random object.

    //After choosing, the item should be removed from the array, also using
    //[squares removeObject: @"X"]; X can be any object of the array.

    turn = 1;
    s = s - 1;
  }
}

问题是,例如,如果玩家从阵列中选择对象“b”,那么

[squares removeObject: @"b"];

应该触发。

当谈到计算机随机移动时,它有可能选择相同的对象 已经从数组中删除了,在我的例子中是@“b”。

这意味着,当

时,项目不会从数组中删除
[squares removeObject: @"X"];

触发器。

任何人都有解决这个问题的方法吗?

请,我需要你的帮助。

=======已解决========

我尝试使用你的答案但无法解决问题..

解决方案非常简单:p ..刚刚将数组移动到“viewDidLoad”方法。

谢谢你们的帮助,很抱歉,我不能接受对我不起作用的答案。 我很感激你的努力。

3 个答案:

答案 0 :(得分:2)

您可以尝试使用indexOfObject:然后removeObjectAtIndex:从数组中删除一个项目。

我怀疑如果你调试,indexOfObject可能会给你一个NSNotFound(非常大的数字)的结果,这意味着由于某种原因,它会认为数组没有保存你传入的字符串。很可能是字符串中的东西您传入以从数组中删除条目与数组中的等效条目不匹配。

答案 1 :(得分:1)

我会使用NSMutableDictionary而不是Array,这样你可以直接访问添加/删除等...

答案 2 :(得分:1)

您原来的问题尚不清楚,但我认为您在使用指针引用这一古老问题时遇到了问题。

以下是两个相同的字符串的典型示例,但 完全相同:

if (@"bears" == @"bears")
{

}

以上只比较指针,而不是字符串。说[squares removeObject:@"b"];之类的东西是不正确的,因为你正在分配一个新的字符串(b),然后对你的数组说; “删除此指针引用的对象”,当你期望的是“删除包含b的对象”时(这不是Arrays的工作方式)。

tl; dr,使用字典。