2012-01-11 62 views
0

后立即更新我在cocos2d/Xcode中对象没有更新

在我的代码使用NSMutableArray的一个很奇怪的错误,我有一个包含对象的NSMutableArray一个

NSMutableArray *peasantArray; 

和另一NSMutableArray中包含对象B

NSMutableArray *treeArray; 

在预定的更新函数中,我调用了另一个函数,它本质上具有以下功能: 我会遍历* peasantArray中的所有对象A,如果任何农民对象有一个变量var == GameEntityCommandIdling,我会修改对象B在第二个NSMutableArray * treeArray,

问题是,我注意到有时在我修改peasantArray中的对象A之后,修改后的变量(var)在对象A中被修改/更新之后,通过以预定方式输出变量状态;但如果我要在下一个时间表(1/30s)中再次遍历NSMutableArray * peasantArray,我会再次找到具有较旧/未更新变量(var)的对象A,并且这会导致我的算法出错,

然而,如果通过的NSMutableArray * peasantArray我环路小于1秒,每次我看到对象的变量(VAR)正确地作为更新的变量值,

那么,有没有对如何限制快我可以遍历NSMutableArray?

这里有一些代码段,我基本上只是提到,

NSMutableArray *peasantArray; 
NSMutableArray *treeArray; 

.....

peasantArray = [[[NSMutableArray alloc] initWithCapacity:1]retain]; 
for(int i = 0; i < 1; i++) 
{ 
    Peasant *A = [[Peasant alloc] init]; 
    [peasantArray addObject:A]; 
} 

....更新()

//内
for (int i = 0;i < [peasantArray count];i++) 
{ 
    Peasant *A = [peasantArray objectAtIndex:i]; 
    if (A.status == something) 
    { 
     printf("A.status is something\n"); 
     A.status = sometingelse; 

     ... 
     //update other things not related to this NSMutableArray or object 
    } 
} 

.....

因此错误是,有时我会的“A.status东西”多printf的,虽然只是它的一个应该打印,

我真的很感谢所有帮助,

感谢,

+0

'status'是什么类型?它是一个'NSString'吗? – Anna 2012-01-11 13:15:31

回答

1

那么,有没有对我多快可以通过NSMutableArray的迭代有限制吗?

绝对没有。那将是我遇到过的一个数组的最愚蠢的实现。 :)

最简单的解释通常是答案。你说该消息打印不止一次。那么你有没有检查过,也许不止一个农民的地位被设定为某种东西?

如果不是这种情况,您确定状态更新是在同一帧中打印两次,而不是在两次后续更新中打印两次?

早些时候,你似乎表明,迭代一个数组和修改其他数组对象的效果会以某种方式失效。这让我想指出,如果在两个阵列中都有相同的对象,修改阵列A中的对象属性也将修改阵列B中包含的同一对象的属性。

您可能想要give breakpoints a(nother) try。在逐步完成代码时,应该很容易找到问题。

+0

谢谢,错误有点类似于你的答案。我错误地修改了同一个对象一个变量(var), – user1143056 2012-01-11 23:22:17

0

在这里,你有内存泄漏

for(int i = 0; i < 1; i++) 
{ 
    Peasant *A = [[Peasant alloc] init]; 
    [peasantArray addObject:A]; 
} 

,你应该将它添加到阵列中后释放一个自ADDOBJECT增加了引用计数的对象。

for(int i = 0; i < 1; i++) 
{ 
    Peasant *A = [[Peasant alloc] init]; 
    [peasantArray addObject:A]; 
    [A release]; 
}