2012-01-11 79 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]; 
}