在我的程序中,我有兩個類:收集器和實體。收集器將實體存儲在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];
沒有結果!
curCollector不可能擁有一個實體,而且如果收藏者條目是同一個對象(這就是我認爲你所說的),那麼收集器條目就沒有實體。 – nall 2010-03-05 06:38:23
我不知道。也許仔細看看方法addEntity :. – yehnan 2010-03-05 06:40:41
還要確保你的實體成員不是零。這聽起來好像不是基於你的意見,但這可能是問題(沒有更多的代碼很難說)。 – nall 2010-03-05 06:48:08