首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >iphone-无法从数组中删除对象

iphone-无法从数组中删除对象
EN

Stack Overflow用户
提问于 2011-03-21 04:11:35
回答 3查看 290关注 0票数 1

我的应用程序快完成了,但我遇到了一个问题,我不能从我创建的数组中删除对象。

这是我的代码示例:

代码语言:javascript
运行
复制
-(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“,那么

代码语言:javascript
运行
复制
[squares removeObject: @"b"];

应该会触发。

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

因此,这意味着在以下情况下不会从数组中删除项

代码语言:javascript
运行
复制
[squares removeObject: @"X"];

触发器。

有人有解决这个问题的办法吗?

求你,我需要你的帮助。

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

我试着用你的答案,但没能解决这个问题。

解决方案很简单:p ..

谢谢你们的帮助,很抱歉,我不能接受答案,因为我没有工作。我很感谢你的努力。

EN

回答 3

Stack Overflow用户

发布于 2011-03-21 05:07:44

您可以尝试使用indexOfObject: then removeObjectAtIndex:从数组中删除一项。

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

票数 2
EN

Stack Overflow用户

发布于 2011-03-21 05:21:23

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

票数 1
EN

Stack Overflow用户

发布于 2011-03-21 06:50:40

你最初的问题不清楚,但我认为你在指针引用这个古老的问题上遇到了问题。

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

代码语言:javascript
运行
复制
if (@"bears" == @"bears")
{

}

上面只比较了指针,而不是字符串。说像[squares removeObject:@"b"];这样的话是不正确的,因为你分配了一个新的字符串(b),然后对你的数组说:“删除这个指针引用的对象”,而你期望的是“删除其中包含b的对象”(这不是数组的工作方式)。

tl;dr,使用字典。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5371188

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档