2010-03-05 64 views
1

在我的程序中,我有兩個類:收集器和實體。收集器將實體存儲在NSMutableArray中。Objective-C:更改NSMutableArray中的對象

@interface Entity : NSObject { 
    ... 
} 

@interface Collector : NSObject { 
    NSMutableArray *entities; 
    uint someInt; 
    ... 
} 
- (void)addEntity:(Entity*)newEntity; // implemented as [entities addObject:newEntity]; 

收集器也存儲在NSMutableArray(我們稱之爲收集器)。然後,我有這樣的代碼(像這樣):

for (uint i = 0; i < [collectors count]; i++) { 
    Collector *curCollector = [[collectors objectAtIndex:i] retain]; 

    Entity *curEntity = [[Entity alloc] init]; 
    [curCollector addEntity:curEntity]; 
    [curCollector setSomeInt:50]; 

    [curEntity release]; 
    [curCollector release]; 
} 

這部分代碼執行後,我裏面有正確的收藏家沒有新的實體,而是someInt值的變化。此外,當我調試我的代碼時,在釋放變量之前,curCollector包含新實體並且具有地址,與收集器數組中的一個對象相同,但該對象(在收集器數組中)沒有實體。

我在做什麼錯?

P.S .:
在調試過程中,我檢查了所有對象 - 沒有找到nils(特別是對於實體)。
關於addObject - 所有的實現代碼是[entities addObject:newEntity];
另一個有趣的事情(在上面的解釋中指出) - int值設置正確(收集器數組的對象包含someInt == 50)。

P.P.S: 我添加了一行代碼釋放部件之前:

[collectors replaceObjectAtIndex:i withObject:curCollector]; 

沒有結果!

+0

curCollector不可能擁有一個實體,而且如果收藏者條目是同一個對象(這就是我認爲你所說的),那麼收集器條目就沒有實體。 – nall 2010-03-05 06:38:23

+0

我不知道。也許仔細看看方法addEntity :. – yehnan 2010-03-05 06:40:41

+0

還要確保你的實體成員不是零。這聽起來好像不是基於你的意見,但這可能是問題(沒有更多的代碼很難說)。 – nall 2010-03-05 06:48:08

回答

0

嗯。我很抱歉浪費你的時間......這段代碼沒有錯誤。
此代碼(當然)是程序的一部分。然後錯誤被發現了一些步驟。
調試過程中的問題是由XCode調試器引起的,它不能深入課堂內容。我的意思是那個實體在實體數組中。這個數組在收藏家裏面,而這個收藏家在收藏家數組裏面。當我試圖讓實體數組到某個局部變量時,返回的數組有實體(在XCode調試器中顯示)。