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