Objective-C:在NSMutableArray中更改对象

时间:2010-03-05 06:11:48

标签: objective-c inheritance object nsmutablearray

在我的程序中,我有两个类:Collector和Entity。收集器将实体存储在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包含新实体并且具有地址,与collectors数组中的一个对象相同,但该对象(在collectors数组中)没有实体。

我做错了什么?

P.S .:
在调试期间,我检查了所有对象 - 没有找到任何nils(特别是对于实体) 关于addObject - 所有实现代码都是[entities addObject:newEntity];
另一个有趣的事情(在我上面的解释中指出) - 正确设置了int值(收集器数组的对象包含someInt == 50)。

P.P.S: 我在发布代码部分之前添加了一行:

[collectors replaceObjectAtIndex:i withObject:curCollector];

没有结果!!

1 个答案:

答案 0 :(得分:0)

嗯。我很抱歉浪费你的时间......这段代码没有错误。
这段代码(当然)是该计划的一部分。并且稍后发现了一些错误 调试过程中的问题是由XCode调试器引起的,它不能深入了解类的内容。我的意思是该实体是在实体数组中。那个数组是收集器内部的,这个收集器是收集器数组本身。当我试图将实体数组转换为某个局部变量时,返回的数组有实体(显示在XCode调试器中)。