2011-03-20 56 views
1

我的应用程序快完成了,但我遇到了问题,我无法从我制作的 阵列中删除对象。iphone-无法删除阵列中的对象

这是我的代码的示例:

-(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"]; 

触发器除去。

任何人都得到了这个问题的解决方案?

请,我需要你的帮助。

=======解决========

我试图用你的答案,但无法管理要解决的问题..

的解决方案是如此简单:只需将数组移动到“viewDidLoad”方法即可。

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

+3

你成为会员有3个月,并要求7个问题。你的其他6个问题都已经收到答案,其中一个甚至已经得到4个答案。我认为你应该考虑阅读常见问题 - http://stackoverflow.com/faq - 并接受你之前提出的问题的一些答案。一旦你这样做了,人们会更愿意帮助你。 – Jasarien 2011-03-20 20:17:07

+0

嗨,但是当我尝试评价答案时,我收到一条消息,说我必须得到15个代表才能评分。 – 3madi 2011-03-20 20:31:06

+1

我很抱歉,不知道,我刚刚做到了。接受了有用的答案我从用户 – 3madi 2011-03-20 20:37:20

回答

2

您可以尝试使用indexOfObject:then removeObjectAtIndex:从数组中删除一个项目。我猜怀疑,如果你调试,indexOfObject可能会给你一个NSNotFound(非常大的数字)的结果,这意味着由于某种原因它会认为数组没有包含你传入的字符串。您传入的字符串以从数组中删除条目与数组中的等效条目不匹配。

+0

谢谢回答,通过使用indexOfObject,这是否意味着我的对象分配位置在数组中?例如,“a”是1,“b”是2.是吗? – 3madi 2011-03-20 21:14:24

+0

它返回它认为对象是指数 - 所以就像你说的,“一”是1,“B” 2.如果不是1或2,你得到一个非常大的数字,那就是NSNotFound不变,这意味着你询问位置的字符串与数组所持有的字符串不同,这也是为什么“removeObject”不起作用,因为它认为没有要删除的对象。 – 2011-03-20 22:45:59

+0

1更问题之前我尝试,,如果在阵列中两个对象,“一” atIndex 0,和“b” atIndex 1中,当我removeObjectAtIndex 0是“A”。将“b”移动到索引0,否则它将坚持1?因为如果它移动,该方法将对我的应用程序有用。 – 3madi 2011-03-21 00:09:19

1

我会用的NSMutableDictionary代替阵列这样你可以有添加/删除等直接访问...

+0

虽然没有钥匙。一个的NSMutableSet很可能是他真正需要的... – amattn 2011-03-20 21:22:52

+0

解决我试图用你的答案,但无法管理来解决这个问题。该解决方案是如此简单:对..刚搬进数组“的viewDidLoad”方法。谢谢你们的帮助,非常抱歉,但我无法接受答案,因为没有为我工作。我很欣赏你的努力 – 3madi 2011-03-24 15:22:59

1

你原来的问题还不清楚,但我认为您遇到的老问题指针引用的问题。

以下是两个串是相同的,但不是完全相同相同的一个典型的例子:

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

} 

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

tl; dr,使用字典。

+0

如何实现我的数组“方块”作为NSDictionary?我一直在寻找一个教程,我发现有值和键,所以我不知道如何做到这一点。制作字典后,我可以使用“randomN = [squares objectAtIndex:arc4random()%[squares count]]”来挑选一个随机对象吗?非常感谢你。 – 3madi 2011-03-21 04:28:03

+0

解决了我试图用你的答案,但无法解决问题..解决方案非常简单:p ..刚刚将数组移动到“viewDidLoad”方法。谢谢你们的帮助,非常抱歉,但我无法接受答案,因为没有为我工作。我感谢你的努力 – 3madi 2011-03-24 15:23:16