내 프로그램에는 Collector와 Entity의 두 클래스가 있습니다. 콜렉터는 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 .:
디버깅하는 동안 모든 개체를 검사했는데 아무 것도 발견하지 못했습니다 (특히 엔티티의 경우).
addObject 정보 - 모든 구현 코드는 [entities addObject:newEntity];
입니다. 또 다른 흥미로운 점은 위의 설명에서와 같이 int 값이 올바르게 설정되어 있습니다 (수집기 배열의 객체에 someInt == 50이 포함되어 있음).
P.P.S : 나는 코드 부분을 해제하기 전에 라인을 추가하지했습니다
[collectors replaceObjectAtIndex:i withObject:curCollector];
검색 결과를!
curCollector가 엔티티를 가질 수 없으며 콜렉터 엔트리가 엔티티를 가지고 있지 않은지 확인합니다 (내가 말한 것). – nall
실마리가 없습니다. 어쩌면 addEntity : 메서드를 자세히 살펴 보겠습니다. – yehnan
또한 엔티티 멤버가 0이 아닌지 확인하십시오. 그것은 귀하의 의견을 기반으로하지 않는 것 같지만 그게 문제가 될 수도 있습니다 (그것은 더 많은 코드 없이는 말하기 어렵습니다). – nall